亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在android中利用Socket實現一個聊天小程序

發布時間:2020-12-07 15:34:19 來源:億速云 閱讀:129 作者:Leah 欄目:移動開發

本篇文章為大家展示了怎么在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() 

上述內容就是怎么在android中利用Socket實現一個聊天小程序,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

四子王旗| 炎陵县| 鄂伦春自治旗| 黄陵县| 剑川县| 台东市| 若羌县| 简阳市| 申扎县| 宿松县| 安塞县| 惠安县| 大姚县| 达拉特旗| 高台县| 醴陵市| 汪清县| 汝南县| 浦东新区| 庄浪县| 斗六市| 宝清县| 绿春县| 叶城县| 通州区| 黑河市| 临海市| 闵行区| 永定县| 永新县| 长海县| 黔东| 福贡县| 新泰市| 保德县| 承德县| 思南县| 泰顺县| 余庆县| 佳木斯市| 兴仁县|