请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

处理客户端收不到服务器发送的消息时, 关注的客户端线程错了!

图片描述老师在这一节里面 02:11 那里, 处理客户端收不到服务器发送的消息时, 进行客户端的调试的时候, 停在了main@1 即主线程Client 的读键盘流 那里, 其实这个地方是读取键盘输入流的, 所以阻塞是正常的.
我们的关注点应该是在Thread-1@556 那个线程, 即TCPClient 中的ReadHandler的 socketInput.readLine(). 当服务器的那端发送消息时, 消息末尾没加换行符则会被客户端的 socketInput.readLine() 函数丢弃.

正在回答 回答被采纳积分+3

1回答

Qiujuer 2019-03-18 10:09:14

嗯嗯,说的正确。

在这里调试时选择的线程不对,不过读取数据的线程倒是会持续等待换行符到达,也不会丢失数据。

如果后续添加一个换行符进去就会正常继续跑起来。此时只是持续等待结束符状态。

多谢指正哈。

0 回复 有任何疑惑可以回复我~
  • Mac下换行是"\n",Windows下换行是"\r\n"。所以对于使用windows的同学服务器端读取消息时丢弃换行符丢弃两个字节len-2,服务器广播消息给客户端及拿取客户端消息转发给其他客户端时补上换行符使用this.msg=msg+"\r\n",这样可能更为合适。
    回复 有任何疑惑可以回复我~ 2019-12-01 16:09:18
  • Qiujuer 回复 none_nkn #2
    或者可以直接去Reader中拿到换行符的字符出来更好。
    回复 有任何疑惑可以回复我~ 2019-12-03 11:25:13
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号