SocketTimeoutException:读取超时

SocketTimeoutException:读取超时,第1张

SocketTimeoutException:读取超时

问题出

BufferedReader.read()
while
循环内部的使用与从连接另一端处理套接字的方式之间的交互。

..read()
仅当从其读取的流结束时才返回-1,这在本质上将意味着套接字已关闭。在关闭套接字之前,服务器只是阻塞
read
,等待客户端发送另一个字符。由于服务器处于阻塞状态
read
,因此永远无法将“
pong”发送回去。客户端自行阻止读取,但最终达到了超时。

TCP套接字用于处理数据流。如果要使用它发送离散消息,则需要在客户端和服务器之间强加一个协议,以便它们各自知道完整消息的到达时间。在这种情况下,客户端和服务器可以同意使用终止符,以指定消息已完成。例如,他们可以同意

n
在每个消息之后发送一个作为终止符的消息。

因此,例如,在您的客户端中,相关代码如下所示:

writer.write("ping");writer.write('n');writer.flush();int i=0;StringBuilder sb=new StringBuilder();while((i=reader.read())!=-1){    char c = (char)i;    if(c == 'n')        break;    sb.append(c);}System.out.println("The server sends: "+sb);


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5502095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存