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

Android利用socket通信

2016-07-18 17:47 435 查看

android的socket通信

一台PC和两部手机,手机作为客户端和服务器之间以socket方式通信,PC作为服务器在客户端之间转发消息,实现两个客户端之间的通信。

(一)客户端实现:

初始化工作:

指定IP和端口,新建socket对象。这个IP和端口都要和服务器那边的socket一样。

Socket mSocket = new Socket(ip, port);


然后通过客户端socket对象获取writer和reader:

mReader = new BufferedReader(new InputStreamReader(mSocket.getInputStream(), "utf-8"));
mWriter = new BufferedWriter(new OutputStreamWriter(mSocket.getOutputStream(), "utf-8"));


读取消息:

mReader.readLine()方法是阻塞式的,就是说有消息传来才会进入下一步。

规定以JSON对象来传输消息,于是根据mReader.readLine()读出的String构建JSON:

JSONObject json = new JSONObject((String)mReader.readLine());


最后将json中的数据读出来即可。

发送消息:

构建一个JSON对象,将数据放入其中,然后使用下面语句发送:

mWriter.write(json.toString()+"\n");
mWriter.flush();


(二)服务器端实现:

服务器端有两个功能,监控客户端和服务器之间的连接,并维护一个消息队列。

处理消息队列线程:

一个线程用于监控消息队列长度,当长度大于0时,按顺序从队列中取出前面的消息,构建JSON对象,然后通过

writer.write(json.toString()+"\n");
writer.flush();


语句发送消息,其中writer是根据socket获取的bufferwriter:

BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));


监听客户端对服务器的连接:

初始化时,新建服务器端socket:

ServerSocket mServer = new ServerSocket(port);


并通过调用阻塞方法

Socket socket = mServer.accept();


获得一个socket对象,这行代码只会在有客户端连上服务器后才执行,于是我们可以得知,添加了新的客户端。

之后的流程与客户端一样,通过reader读取客户端的数据,并添加到消息队列;处理消息队列线程发现有新消息送来,于是将该消息发送出去:

BufferedReader reader = new BufferedReader(new InputStreamReader(socket.get
4000
InputStream(), "utf-8"));
String data = reader.readLine();//阻塞语句,有数据送到服务器才会往下执行
JSONObject json = new JSONObject(data);


从json中读出数据,再重新打包成自定义的消息类,最后添加到消息队列中去。



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