博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA 网络编程小记
阅读量:6247 次
发布时间:2019-06-22

本文共 552 字,大约阅读时间需要 1 分钟。

在进行JAVA网络编程时,发现写入的数据对方等200ms左右才会收到。起初认为是JAVA自已进行了 Cache。进行flush也没有效果。查看JDK代码,Write操作直接调用的native方法,说明JAVA层面并没有缓存。再看flush,只是一个空方法. FileOutputStream一样,在进行write的时候已经写入OS。后来发现是tcpNoDelay的问题。参考:

.

另外一个问题, 对方把连接关闭了。但发送方还能写入数据,有时第二次才会出错。经调查取证,这是因为对于Tcp/Ip协议,向一个已收到Fin包的Socket数据是可行,但向一个收到ResetSocket发送数据,则会出现异常。需要发送两次才能出现异常,这是因为第一次发送数据时,当时的Socket只收到了Fin包,所以正常。第一次的数据发送到对方,对方因连接已关闭,协议栈回复Reset. 所以发送方第二次时发送数据时,这里的Socket收到了Reset,所以出现异常。

参考:http://blog.csdn.net/raintungli/article/details/8625126

 

本文转自 anranran 51CTO博客,原文链接:http://blog.51cto.com/guojuanjun/1188161

你可能感兴趣的文章
Apache prefork性能调优
查看>>
mysql需要调整的参数
查看>>
HTML5 本地缓存 (web存储)
查看>>
UWP ListView
查看>>
centos安装tomcat
查看>>
samba
查看>>
基于Storyboard创建多分支NavigationController的方法
查看>>
PV与并发之间换算的算法换算公式
查看>>
Linux下文件的特殊权限笔记
查看>>
/bin,/sbin /usr/sbin,/usr/bin
查看>>
mariadb操作审计
查看>>
Vmawre vsphere 5.5之SSD存储设置
查看>>
Linux CentOS 永久设置别名Alias
查看>>
JavaScript ES6箭头函数指南
查看>>
通过Gradle来取的Jenkins的build
查看>>
Hadoop基础入门学习笔记(基本概念)
查看>>
MongoDB复制集
查看>>
windows系统之WSUS服务器:更改WSUS更新文件的路径
查看>>
highlight testing
查看>>
Python中的module,library,package之间的区别
查看>>