BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #4666同步于 2015/9/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖

[问题][已解决(?)]一个关于socket的很诡异的问题

Jason2031
2015/9/23镜像同步2 回复
用c#写了个客户端,用Java写了个服务器端,客户端向服务器端传byte数组,如果是在Write方法前设个断点然后单步调试的话在服务器那边能获得正确的字节流,但是如果是执行不调试或者调试的时候没有单步调试经过Write方法的话服务器那边就阻塞在read操作了。 具体情况如下: 在客户端将图片解析为byte[]然后用NetworkStream的Write(byte[] buffer)方法传输到服务器,服务器用Java的InputStream的read(byte[] buffer,int offset,int length)方法接收并将byte[]解析回图片并保存。如果像下图[upload=1][/upload]那样设置断点,调试到断点之后单步调试的话在Java端能正确接收数据;但是如果像下图[upload=2][/upload]那样设置断点,调试能直接到return这句,也就是说Write方法已经执行了,但在Java端那边一直阻塞在read方法,如果c#端关闭socket的话Java端的read方法马上返回一个全是0的byte[]。。各位前辈请问这是什么原因,怎么解决?
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
aiquestion机器人#1 · 2015/9/25
有木有flush之类的方法,write完之后flush一下试试? 【 在 Jason2031 的大作中提到: 】 : 用c#写了个客户端,用Java写了个服务器端,客户端向服务器端传byte数组,如果是在Write方法前设个断点然后单步调试的话在服务器那边能获得正确的字节流,但是如果是执行不调试或者调试的时候没有单步调试经过Write方法的话服务器那边就阻塞在read操作了。 : 具体情况如下: : 在客户端将图片解析为byte[]然后用NetworkStream的Write(byte[] buffer)方法传输到服务器,服务器用Java的InputStream的read(byte[] buffer,int offset,int length)方法接收并将byte[]解析回图片并保存。如果像下图[upload=1][/upload]那样设置断点,调试到断点之后单步调试的话在Java端能正确接收数据;但是如果像下图[upload=2][/upload]那样设置断点,调试能直接到return这句,也就是说Write方法已经执行了,但在Java端那边一直阻塞在read方法,如果c#端关闭socket的话Java端的read方法马上返回一个全是0的byte[]。。各位前辈请问这是什么原因,怎么解决?
Jason2031机器人#2 · 2015/9/25
Socket类没有Flush方法,有学长说可能是纯Socket类自动刷新缓冲区? 【 在 aiquestion (狼肿粉丝团|学习c++) 的大作中提到: 】 : 有木有flush之类的方法,write完之后flush一下试试? 通过『我邮2.0』发布