android Socket实现简单聊天小程序

android Socket实现简单聊天小程序,供大家参考,具体内容如下

服务器端:

package org.hwq.echo; 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; 

public class TalkServer {
  public static void main(String[] args) throws IOException{
    ServerSocket server = null;
    Socket client = null;
    BufferedReader in = null;
    PrintWriter out = null;
    try{
      server = new ServerSocket(4700);
      client = server.accept();
      out = new PrintWriter(client.getOutputStream());
      in = new BufferedReader(new InputStreamReader(client.getInputStream()));
      String line = in.readLine();
      while(!"bye".equals(line)){
        System.out.println("client:"+line);
        out.println("echo:"+line);
        out.flush();
        line = in.readLine();
      }
    }catch (Exception e) {
      e.printStackTrace();
      if(client !=null)
        client.close();
      if(server != null)
        server.close();
    }
  }
} 

手机端:

package org.hwq.cho; 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException; 

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; 

public class EchoActivity extends Activity implements OnClickListener {
  EditText show,msg;
  Button send;
  Handler handler;
  Socket client;
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    handler = new MyHandler();
    show = (EditText) findViewById(R.id.show);
    msg = (EditText) findViewById(R.id.msg);
    send = (Button) findViewById(R.id.send);
    send.setOnClickListener(this);
  }
  @Override
  public void onClick(View arg0) {
    String message = msg.getText().toString();
//   System.out.println("msg:"+message);
    new EchoThread(EchoActivity.this,message).start();
  }
  public class MyHandler extends Handler{
    @Override
    public void handleMessage(Message msg) {
      switch(msg.what){
      case 1:
        Toast.makeText(EchoActivity.this, "建立连接失败", 0).show();
        break;
      case 2:
        String message = (String) msg.obj;
        System.out.println("Handler:"+message);
        show.append("\n"+message);
        break;
      }
    }
  }
  private class EchoThread extends Thread{
    private Context context;
    private String msg;
    EchoThread(Context context,String msg){
      this.context = context;
      this.msg = msg;
    }
    public void run(){
      if(client == null){
        try {
          client = new Socket("192.168.1.102",4700);
        } catch (IOException e) {
          Message message = new Message();
          message.what = 1;
          handler.sendMessage(message);
        }
      }
      System.out.println("建立连接");
      try{
        BufferedReader in;
        BufferedReader input;
        PrintWriter out;
        in = new BufferedReader(new InputStreamReader(client.getInputStream()));
        out = new PrintWriter(client.getOutputStream());
        String line = msg;
        if(!"bye".equals(line)){
          System.out.println("line:"+line);
          out.println(line);
          out.flush();
          String echo = in.readLine();
          System.out.println("server:"+echo);
          Message message = new Message();
          message.obj = echo;
          message.what = 2;
          handler.sendMessage(message);
        }
      }catch (Exception e) { 

      }
    }
  }
} 

注意几点:

1、添加网络权限

<uses-permission android:name="android.permission.INTERNET"/>

如果没添加,无法使用socket连接网络。
2、在新启线程中不要使用android系统UI界面
在EchoThrad的run()方法里面,有下面代码:

if(client == null){
        try {
          client = new Socket("192.168.1.102",4700);
        } catch (IOException e) {
          Message message = new Message();
          message.what = 1;
          handler.sendMessage(message);
        }
      }

这里的handler.sendMessage(message);是发送一个消息给handler,然后handler根据消息弹出一个Toast显示连接失败。如果这里直接使用

Toast.makeText(EchoActivity.this, "建立连接失败", 0).show();

会报如下错:

Can't create handler inside thread that has not called Looper.prepare()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 微信小程序使用Socket的实例

    微信小程序使用Socket的实例 首先,一个小程序同时只能有一个WebSocket连接,如果当前已经存在一个WebSocket连接,会关闭当前连接,并重新建立一个连接. 其次,如果使用了appID,协议必须是 wss://... 最近团队用小程序做行情,在连接socket的时候,发现在还没有进行subscribe的情况下,就直接进行了广播,并且自动关闭了socket连接, 时间紧迫,抓耳挠腮,遂引用了socket-io(基于小程序的websocket仿写的socket-io,并非官方的socke

  • 微信小程序 websocket 实现SpringMVC+Spring+Mybatis

    微信小程序实现websocket步骤: 后台: 1. 添加maven依赖 2. 创建握手 3. 创建处理器 4. spring配置(xml配置或javabean方式配置任选一种) 微信小程序: 1. 书写连接 java后台 1.添加maven依赖 <!-- websocket --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket&l

  • 微信小程序 网络API Websocket详解

    微信小程序 网络API: 微信小程序 网络API发起请求 微信小程序 网络API 上传.下载 微信小程序 网络API Websocket wx.connectSocket(OBJECT) ​ 创建一个 WebSocket 连接:一个微信小程序同时只能有一个WebSocket连接,如果当前已存在一个WebSocket连接,会自动关闭该连接,并重新创建一个WebSocket连接. OBJECT参数说明: 参数 类型 必填 说明 url String 是 开发者服务器接口地址,必须是HTTPS协议,且

  • 微信小程序 SocketIO 实例讲解

    微信小程序 ScoketIO 简单实例: 现在好的人在搞微信小程序,ScoketIO 是微信的网络通信,它的重要性不言而喻,这里给大家讲讲如何使用以及注意事项! 微信小程序 的SocketIO 实现,基于CFETram 的实现基础上完善 const emitter = require('./emitter.js'); /** socket.io 协议常量 */ var packets = { open: 0 // non-ws , close: 1 // non-ws , ping: 2 , p

  • 微信小程序 WebSocket详解及应用

    微信小程序 WebSocket 实例效果: 今天主要说一下微信的WebSocket接口以及在小程序中的使用. WebSocket是什么(简述) 微信的WebSocket接口和HTML5的WebSocket基本一样,是HTTP协议升级来的,做为一个新的Socket在B/S上使用,它实现了浏览器与服务器全双工通信. 因为这里是做小程序,所以就不对WebSocket的底层和协议做过多的说明了,只是稍微介绍一下.想了解详细的WebSocket可以参考如下:WebSocket 协议 WebSocket与A

  • android Socket实现简单聊天小程序

    android Socket实现简单聊天小程序,供大家参考,具体内容如下 服务器端: package org.hwq.echo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public cla

  • java网络通信技术之简单聊天小程序

    本文实例为大家分享了java实现简单聊天小程序的具体代码,供大家参考,具体内容如下 再学习完java的通信技术后,做了一个简单的窗体聊天程序.程序非常简单,主要目的是当练习巩固自己所学的东西,在这里写出来记录以下.下面直接上代码. 首先是服务端代码: package ChatTwoPackage; import java.io.*; import java.net.*; public class ChatTwoServer { public ChatTwoServer(int port,Stri

  • C++ SOCKET多线程实现聊天小程序

    本文实例为大家分享了C++ SOCKET多线程实现聊天小程序的具体代码,供大家参考,具体内容如下 TCP/IP协议与SOCKET 什么是网络协议? 计算机网络中,各个实体之间的数据交换必须遵守事先约定好的规则,这些规则就称为协议. 网络协议的组成要素有: 1.语法,数据与控制信息的结构或格式 2.语义:需要发出何种控制信息,完成哪些动作以及做出何种响应 3.时序:事件实现顺序的详细说明 在一个网络协议中,通信的实体的相同层次的结构必须执行相同的协议,这是协议的对等性原则. TCP/IP体系结构与

  • android Socket实现简单聊天功能以及文件传输

    干程序是一件枯燥重复的事,每当感到内心浮躁的时候,我就会找小说来看.我从小就喜爱看武侠小说,一直有着武侠梦.从金庸,古龙,梁羽生系列到凤歌(昆仑),孙晓(英雄志)以及萧鼎的(诛仙)让我领略着不一样的江湖. 如果你有好看的武侠系列小说,给我留言哦.题外话就扯这么多了,接着还是上技术. 看看今天实现的功能效果图: 可以这里使用多台手机进行通讯,我采用的服务器发送消息. 是不是只有发送消息,有些显得太单调了.好,在发送消息的基础上增加文件传输.后期会增加视频,音频的传输,增加表情包.那一起来看看图文消

  • 基于java socket实现 聊天小程序

    服务器 package demo04; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.DataInputStream; import java.io.DataOutp

  • python实现聊天小程序

    本文实例为大家分享了python实现聊天小程序的具体代码,供大家参考,具体内容如下 我这里实现的是客户端与服务端进行通信的功能,比较简单,与上一篇文章的群聊不太一样. 服务端server.py #-*- coding:utf-8 -*- import socket, traceback, sys host = '' port = 51423 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_

  • Python socket实现简单聊天室

    本文实例为大家分享了Python socket实现简单聊天室的具体代码,供大家参考,具体内容如下 服务端使用了select模块,实现了对多个socket的监控.客户端由于select在Windows下只能对socket使用,所以使用了多线程来实现对客户端输入和socket连接的同时监控.注意这里的socket设置为了非阻塞.这样就实现了在一个线程中同时进行socket的接收和发送. 服务器代码: # -*- coding: utf-8 -*- import socket,select conne

  • C++实现聊天小程序

    C++写一个游戏聊天服务器,供大家参考,具体内容如下 最近学习网络编程写了个聊天小程序,写个博客记录下自己的代码 涉及的技术: c++网络编程 c++多线程 c++ STL 设计原理 以一个结构体的形式存储客户端,用vector存取存在的客户端,开启多线程处理逻辑 服务器允许登陆多个客户端,允许公屏聊天也允许私聊,默认情况下属于公屏聊天,若想私聊,格式为"@用户名+要发送的消息":运行效果如下图: 服务器实现 #include "stdafx.h" #include

  • Android App跳转微信小程序踩坑实战

    最近,有一个App跳转小程序的需求,参考微信的官方文档,接入还是比较简单的,不过中途遇到了一个坑,所以记录一下. 首先,需要登录微信开放平台 微信开放平台,创建一个移动应用,然后系统会返回一个appid. 需要说明的是,不管是跳转微信小程序还是微信登录.分享,都需要先在微信开放平台注册appId.然后,就可以参考 Android APP拉取小程序的例子,在WebView中调用下面的代码(可以是直接调用,也可以是协议拦截). String appId = "wxd930ea5d5a258f4f&q

  • Android实现的截屏小程序示例

    本文实例讲述了Android实现的截屏小程序.分享给大家供大家参考,具体如下: 先看截图,不过这个截屏还不够完整,头上的statusbar没有,呈黑色. 多按了几次,就成这样了,呵呵. package com.test; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Bitmap.Config; import

随机推荐