android Socket實現(xiàn)簡單聊天小程序
android Socket實現(xiàn)簡單聊天小程序,供大家參考,具體內(nèi)容如下
服務(wù)器端:
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、添加網(wǎng)絡(luò)權(quán)限
<uses-permission android:name="android.permission.INTERNET"/>
如果沒添加,無法使用socket連接網(wǎng)絡(luò)。
2、在新啟線程中不要使用android系統(tǒng)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);是發(fā)送一個消息給handler,然后handler根據(jù)消息彈出一個Toast顯示連接失敗。如果這里直接使用
Toast.makeText(EchoActivity.this, "建立連接失敗", 0).show();
會報如下錯:
Can't create handler inside thread that has not called Looper.prepare()
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android Socket實現(xiàn)多個客戶端聊天布局
- android使用Socket通信實現(xiàn)多人聊天應(yīng)用
- Android Socket通信實現(xiàn)簡單聊天室
- Android使用Websocket實現(xiàn)聊天室
- 基于Socket.IO實現(xiàn)Android聊天功能代碼示例
- android socket聊天室功能實現(xiàn)
- android Socket實現(xiàn)簡單聊天功能以及文件傳輸
- Android 基于Socket的聊天室實例
- Android基于socket實現(xiàn)的簡單C/S聊天通信功能
- Android Socket實現(xiàn)多個客戶端即時通信聊天
相關(guān)文章
Android 使用SharePerference判斷是否為第一次登陸的實現(xiàn)代碼
很多app中在第一次安裝登陸時會有引導(dǎo)歡迎界面,第二次打開時就不再顯示引導(dǎo)頁面。這個怎么實現(xiàn)呢?下面小編給大家介紹下使用SharePerference判斷是否為第一次登陸的實現(xiàn)代碼,需要的的朋友參考下吧2017-03-03Studio 編譯報錯:compileSdkVersion ''android-24'' requires JDK 1.
今天小編就為大家分享一篇關(guān)于Studio編譯報錯:compileSdkVersion 'android-24' requires JDK 1.8 or later to compile.的解決辦法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10Android LayoutInflater加載布局詳解及實例代碼
這篇文章主要介紹了Android LayoutInflater加載布局詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02Android Studio獲取網(wǎng)絡(luò)JSON數(shù)據(jù)并處理的方法
這篇文章主要為大家詳細介紹了Android Studio獲取網(wǎng)絡(luò)JSON數(shù)據(jù)并處理的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10flutter實現(xiàn)更新彈窗內(nèi)容例子(親測有效)
Flutter是一款移動應(yīng)用程序SDK,包含框架、widget和工具,這篇文章給大家介紹flutter實現(xiàn)更新彈窗內(nèi)容例子,親測可以使用,需要的朋友參考下吧2021-04-04Android開發(fā)之ListView的head消失頁面導(dǎo)航欄的漸變出現(xiàn)和隱藏
這篇文章主要介紹了Android開發(fā)之ListView的head消失頁面導(dǎo)航欄的漸變出現(xiàn)和隱藏的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-11-11