socket.inputstream.read(),如何解决阻塞问题,求解

aaaeefv 2016-09-03 10:41:01
socket.inputstream.read(),在读取远程服务器数据完毕时,会一直阻塞,如何在客户端手动触发流结束标识让其返回-1退出阻塞。
或者如何在服务器发送一个流结束标识给客户端让其返回-1退出阻塞。谢谢
...全文
1262 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
aaaeefv 2016-09-07
  • 打赏
  • 举报
回复
引用 2 楼 Sun1956 的回复:
read方法本来就是阻塞的啊,不然你怎么可以一直读取数据。 你想要的无非是在数据传输完了之后,关闭socket。 可以向你说的,服务端数据发送完毕后,在发送一个结束标志,然后客户端通过判断接收的是不是这个结束标志,如果是,close 掉socket。 但这种方法不是特别好,还是自己定义一个数据报文格式把,例如,“数据长度+数据”,这样也避免了粘包问题。
不是关闭socket,只是暂时退出read(),以后还要读数据的,不然,不停的打开socket,关闭socket不太好。 socket.shutdownInput(),关闭输入端后还可以重新打开吗
aaaeefv 2016-09-07
  • 打赏
  • 举报
回复
引用 2 楼 Sun1956 的回复:
read方法本来就是阻塞的啊,不然你怎么可以一直读取数据。 你想要的无非是在数据传输完了之后,关闭socket。 可以向你说的,服务端数据发送完毕后,在发送一个结束标志,然后客户端通过判断接收的是不是这个结束标志,如果是,close 掉socket。 但这种方法不是特别好,还是自己定义一个数据报文格式把,例如,“数据长度+数据”,这样也避免了粘包问题。
在读远程文件时,读到文件尾时,读到文件尾时会返回-1,我觉得读远程文件也是用套接字实现的,读到结尾时,它是如何让远程端的read返回-1?
aaaeefv 2016-09-07
  • 打赏
  • 举报
回复
引用 3 楼 qq_27378303 的回复:
new BufferedReader(new InputStreamReader(socket.getInputStream())).readLine()是这样吧 socket.inputstream.read()没报错吗
实际不是这样写的,只是方便提问而已
  • 打赏
  • 举报
回复
new BufferedReader(new InputStreamReader(socket.getInputStream())).readLine()是这样吧 socket.inputstream.read()没报错吗
ps45221 2016-09-05
  • 打赏
  • 举报
回复
read方法本来就是阻塞的啊,不然你怎么可以一直读取数据。 你想要的无非是在数据传输完了之后,关闭socket。 可以向你说的,服务端数据发送完毕后,在发送一个结束标志,然后客户端通过判断接收的是不是这个结束标志,如果是,close 掉socket。 但这种方法不是特别好,还是自己定义一个数据报文格式把,例如,“数据长度+数据”,这样也避免了粘包问题。
day_moon 2016-09-03
  • 打赏
  • 举报
回复
不知道消息队列是否可以解决你的问题,不过可以一试?

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧