您的位置:首页 > 移动开发 > Android开发

基于Socket的Android与PC简单聊天应用的实现

2016-08-10 15:57 791 查看
实现Socket聊天其实质就是一个Socket的双向通信,分为服务端和客户端,都是 需要得到一个socket对象,通过socket获取流得到我们需要的数据。

标准的写法都是开启一个while(true)的线程不断的去监听接收消息,另外启一个线程去发送消息。为了方便演示效果这里写了一个Winform应用作为服务端。客户端和服务端的代码基本上完全相同。下面给出

android收发数据主要代码。

接收数据:

private class ReceiveThread extends Thread {
private InputStream inStream = null;
private byte[] buffer;
private String str = null;
ReceiveThread(Socket socket) {
try {
inStream = socket.getInputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
while (true) {
buffer = new byte[512];
try {
inStream.read(buffer);//读流方式应该和发送一致
//(read、readUTF),否则阻塞
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
str = new String(buffer, "UTF-8").trim();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (buffer.length > 0) {
Message msg = Message.obtain();
msg.obj = str;
msg.what = MSG_REC;
myHandler.sendMessage(msg);//将获取的数据发送出去
}
}
}
}


发送数据:

Runnable sendThread = new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
byte[] sendBuffer = null;
try {
sendBuffer = strMessage.getBytes("UTF-8");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
outStream = socket.getOutputStream();
Message msg = Message.obtain();
msg.obj = strMessage;
msg.what = MSG_SEND;
myHandler.sendMessage(msg);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
outStream.write(sendBuffer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};


来看看效果吧:

android:



PC:



源码下载,点击这里

http://download.csdn.net/detail/mythace/9600070
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: