首页 > 系统 > Android > 正文

android Socket实现简单聊天小程序

2019-12-12 02:41:48
字体:
来源:转载
供稿:网友

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() 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表