国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > 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() 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凯里市| 张掖市| 新邵县| 万山特区| 鄂托克旗| 昌平区| 华阴市| 铁力市| 东莞市| 盐源县| 阳原县| 施秉县| 全州县| 若尔盖县| 宾阳县| 壤塘县| 宜阳县| 溧阳市| 大厂| 呼和浩特市| 肇庆市| 凤台县| 桃源县| 深水埗区| 迁西县| 喜德县| 鲜城| 葫芦岛市| 铜鼓县| 盐边县| 江口县| 铜梁县| 苗栗县| 拜泉县| 朝阳县| 霍城县| 建德市| 大新县| 鸡西市| 水城县| 白沙|