首先,对于以下问题的冗长解释,我感到抱歉。
我有一个简单的TCP客户端。这是代码片段:
......
ouputStream = socket.getOutputStream();
. .....
bufferedOutputStream.flush();
socket.shutdownOutput();
......
InputStream is = socket.getInputStream();
.....
while(r=bufferedReader.read()!-1){
Reading the response
}
socket.shutdownInput();
.......
socket.close();
我的TCP客户端可以与多个TCP服务器一起使用,除了一个特定的TCP服务器。我的TCP客户端没有在早上和下午(服务器选择小时时间)从该服务器获得响应,但在晚上,晚上和清晨则没有任何问题,可以完美地获得响应。
因此,我使用WireShark在服务器选择时间内检查网络的数据包。
拾取时间内WireShark的检查代码段:
4 0.072547 CCC.CCC.CCC.CCC SSS.SSS.SSS.SSS TCP 66 clientPort> serverPort [FIN,ACK] Seq = 2008 Ack = 1 Win = 14720 Len = 0 TSval = 992536 TSecr = 4189227564
....
....
7 0.156504 SSS.SSS.SSS.SSS CCC.CCC.CCC.CCC TCP 66 serverPort> clientPort [ACK] Seq = 1 Ack = 1449 Win = 8704 Len = 0 TSval = 332931140 TSecr = 259206577
8 0.159312 SSS.SSS.SSS.SSS CCC.CCC.CCC.CCC TCP 78 [TCP Dup ACK 7#1] serverPort> clientPort [ACK] Seq = 1 Ack = 1449 Win = 8704 Len = 0 TSval = 332931141 TSecr = 259206577 SLE = 2008 SRE = 2009
[SEQ / ACK分析]
[TCP分析标志]
[这是TCP重复确认]
[重复的ACK#:1]
[复制到帧中的ACK:7]
[专家信息(注/顺序):重复的ACK(#1)]
[消息:重复的ACK(#1)]
[严重级别:注意]
[组:序列]
注意:SSS.SSS.SSS.SSS是服务器ip,CCC.CCC.CCC.CCC是客户端ip
是TCP服务器的问题吗?或socket.shutdownOutput()和socket.shutdownInput()是否负责重复的ACK?
我不确定问题出在哪里,因为其他服务器在我的TCP客户端(带有shutdownOuput和shutdownInput)下都可以,并且该特定服务器在选择时间内没有响应
(仅上午和下午)时间,但其他时间工作。
如果有人在这个问题上建议我,我会很高兴。
最佳答案
是TCP服务器的问题吗?
问题可能出在中间网络丢弃数据包。
socket.shutdownOutput()和socket.shutdownInput()是否负责重复的ACK?
没有。