重新connect时无法检测到数据包

dreameronair 2010-03-24 01:08:14
我想测试一下客户端程序在断网之后恢复的情况
程序流程是这样的:
1.连接服务端,双方成功传送数据
2.拔掉客户端网线
3.客户端判断超时closesocket,重新建立socket
4.用新的socket来connect,客户端和服务端的IP和端口均不变。
问题是这样的,拔掉网线后程序在不停地进行3,4过程。插上网线后依然进行3,4过程,但是用wireshark观察网络包,发现connect函数执行后没有检测到任何数据包。
但是可能稍微等一会(1分钟左右)就可以connect成功。
请问这种情况是为什么呢?应该和服务端没有关系,因为connect函数没有发出任何的数据包,但是返回是0,表示connect成功了。
...全文
215 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
TRUE 2010-03-29
  • 打赏
  • 举报
回复
你这样监测看看:
1、在重复3和4的过程中看每次的socket的句柄是否一样
2、在服务器端,如果connect后,服务器的accept的句柄是否一样?
Wenxy1 2010-03-29
  • 打赏
  • 举报
回复
因为connect函数没有发出任何的数据包()
答:这只是你的应用层没发送数据,但内核的tcp/ip协议栈肯定要发送syn, ack等包,去读读tcp的三次握手过程吧。
mymyal123 2010-03-29
  • 打赏
  • 举报
回复
学习。。。。。
juniorli 2010-03-29
  • 打赏
  • 举报
回复
connect成功而没有收到数据包?过一分钟之后才收到?一分钟之内没有做任何修改吗?
lijianli9 2010-03-25
  • 打赏
  • 举报
回复
客户端判断超时closesocket,重新建立socket
程序逻辑上你重复判断了吗?
cpp_crab 2010-03-24
  • 打赏
  • 举报
回复

Mark,好像我的程序在部分机器也出现这个问题!
kewencommon 2010-03-24
  • 打赏
  • 举报
回复
mark
dreameronair 2010-03-24
  • 打赏
  • 举报
回复
重新建立socket之前已经closesocket了啊,还需要SO_REUSEADDR吗?而且重新bind也成功了。设置的是非阻塞的socket。现在的情况是过一段时间就可以connect成功了,是不是网线重连后需要一段等待时间?
dong364 2010-03-24
  • 打赏
  • 举报
回复
客户端端口不变?你在客户端绑定端口?那你设置了SO_REUSEADDR吗?另外,你要考虑下TIME_WAIT,可以通过设置SO_LINGER来实现

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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