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();
}
}
}
手機(jī)端:
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-03
Studio 編譯報錯: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-10
Android LayoutInflater加載布局詳解及實例代碼
這篇文章主要介紹了Android LayoutInflater加載布局詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
Android Studio獲取網(wǎng)絡(luò)JSON數(shù)據(jù)并處理的方法
這篇文章主要為大家詳細(xì)介紹了Android Studio獲取網(wǎng)絡(luò)JSON數(shù)據(jù)并處理的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
flutter實現(xiàn)更新彈窗內(nèi)容例子(親測有效)
Flutter是一款移動應(yīng)用程序SDK,包含框架、widget和工具,這篇文章給大家介紹flutter實現(xiàn)更新彈窗內(nèi)容例子,親測可以使用,需要的朋友參考下吧2021-04-04
Android開發(fā)之ListView的head消失頁面導(dǎo)航欄的漸變出現(xiàn)和隱藏
這篇文章主要介紹了Android開發(fā)之ListView的head消失頁面導(dǎo)航欄的漸變出現(xiàn)和隱藏的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-11-11

