Android利用socket通信

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.getInputStream(), "utf-8"));
String data = reader.readLine();//阻塞语句,有数据送到服务器才会往下执行
JSONObject json = new JSONObject(data);

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

这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值