Socket读写的问题 我用DataInputStream和DataOutputStream对Socket流进行封装的,通过日志输出,发现服务端执行到out.writeUTF(str),客户端执行到in.readUTF(),但是却读不到数据,客户端阻塞,不继续执行,而且错误是一定概率才出现的,谁知道可能原因是什么,各位有经验的都来说说啊,有没有谁碰到类似的错误,大约运行10次会出现一次阻塞,其余的都正常,头疼啊,找不到原因,求救!!!!!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 文件输出流当然是关闭了,因为一个文件写完了,自然要关闭流,socket流是没有关闭的 这个基本上是 发送缓冲区 导致的问题,Java为了提升网络IO性能,建立了数据发送缓存区。你需要在: out.writeUTF(str);之后,增加: out.flush();保证数据会从缓冲区中立即发送出去。 flush()过了,还是不行~顺便问下,Socket传输有没有可能会丢失字节?? TCP是可靠传输。当然也会发生信息错误,但概率很低。楼主的问题,只能继续检查代码之间的逻辑是否正常。又看了下你说的意思“服务端执行到out.writeUTF(str)”,意思是这句话都没执行完?这一般意味着发送缓冲区已满且无法发送给对方了,进一步意味着对方的接收缓冲区已满无法继续接收,再进一步意味着对方可能没有及时读取流中的数据。 out.writeUTF(str)已经执行到了,in.readUTF()出现阻塞,缓冲区也都读完了,因为这之前是进行传输文件,而且那个文件已经生成了而且这个错误是一定概率才出现的,这让我非常头疼,感觉是不是Socket本身的问题,不是逻辑上的问题 “out.writeUTF(str)已经执行到了” 是什么意思?是已经执行过去了,还是停在这句话。Socket本身不会有问题的,大家都在用,哪可能突然出个啥问题。 发文件的时候没有控制编码,就是用write(byte[] buf) List的泛型问题 tomcat是web服务器还是应用服务器? hibernate 中 使用原生sql 分页的问题 求救lucene问题,十万火急 keyCode 的应用 struts2 的上传错误 面试时碰到的问题 大家下午好,我想问问有关于tomcat的web.xml文件的配置问题。 小弟求一份关于struts的分页显示源代码,最好是mysql的!有分贡上。。。。。。谢了 struts的Servlet action is not available错误 SSH整合的错误,NullPointerException mysql查最后几条数据问题
out.writeUTF(str);
之后,增加:
out.flush();保证数据会从缓冲区中立即发送出去。
顺便问下,Socket传输有没有可能会丢失字节??
又看了下你说的意思“服务端执行到out.writeUTF(str)”,意思是这句话都没执行完?
这一般意味着发送缓冲区已满且无法发送给对方了,
进一步意味着对方的接收缓冲区已满无法继续接收,
再进一步意味着对方可能没有及时读取流中的数据。
而且这个错误是一定概率才出现的,这让我非常头疼,感觉是不是Socket本身的问题,不是逻辑上的问题