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中读出数据,再重新打包成自定义的消息类,最后添加到消息队列中去。
相关文章推荐
- android登录实现回显用户名和密码
- Android 6.0 Changes
- [置顶] AndroidPdfView一行代码快速显示pdf,支持线上下载与显示
- android新手进阶之录音功能实现
- Android图片常见问题处理
- (4.6.17.2)进程保活(一补录、双服务和双进程):保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护
- Material Design系列,Behavior之BottomSheetBehavior与BottomSheetDialog
- Android环境从无到有,一键齐全
- 关于Cordova热更新的一些见解(android混合开发)
- android在genymotion上使用ffmpeg crash解决办法
- Gradle仓库配置
- 异常的解决办法
- has text relocations 6.0 M android 环信 so 文件 sdk 版本过低 适配Android6.0
- 关于 Android 进程保活,你所需要知道的一切
- Android Socket通信
- Java多线程,断点续传下载(Android通用)
- android圆形图片效果
- Android之Handler用法总结
- android gridview onItemClick参数说明
- android intent 传递list或者对象