客户端关闭socket连接后再重新连接出现的问题

xsq2132276 2009-05-03 02:47:19
在下初学socket编程,发现我写的代码当客户端关闭socket连接后,如果再重新连接服务器,就必须过一段时间(1分钟左右)才能连上,客户端主要代码:
对话框上“连接”按钮:
s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //s是对话框类的成员变量SOCKET s;
if(s == INVALID_SOCKET)
{
AfxMessageBox(" Failed socket()",64);
::closesocket(s);
return 0;
}

sockaddr_in sin; //客户端地址
sin.sin_family = AF_INET;
sin.sin_port = htons(123);
sin.sin_addr.S_un.S_addr = inet_addr("192.168.1.2");

if(::bind(s, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
AfxMessageBox("Failed bind()",64);
::closesocket(s);
return 0;
}

// 服务器地址
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(120);
servAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.1");

if(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == -1)
{
AfxMessageBox(" Failed connect()",64);
::closesocket(s);
return 0;
}
else
AfxMessageBox("连接成功",64);

//......发送数据........

“断开”按钮代码:
if(::closesocket(s)==0)
AfxMessageBox("断开成功",64);

socket库的初始化与释放在对话框类处理了,运行程序,第一次点“连接”则马上成功,点“断开”也能顺利与服务器断开连接;但是再一次点“连接”,则出现" Failed connect()"了,不知是什么原因,再过一两分钟再点“连接”则成功了。
请大家指点,怎么解决此问题?
谢谢!
...全文
3476 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingaiyongheng 2009-12-09
  • 打赏
  • 举报
回复
怎么解决了?
xsq2132276 2009-05-03
  • 打赏
  • 举报
回复
服务器端有关闭与客户端对应的socket的,回到accept。
问题出现在客户端套接字的设置上,已经解决了。
谢谢各位!
wnx_u 2009-05-03
  • 打赏
  • 举报
回复
你用异步通信嘛,这样好弄些
yyp78 2009-05-03
  • 打赏
  • 举报
回复
3楼说的很对,关键是server判断到client断掉,应该马上返回到accept那里,如果重新连接就可以连接上了
xqchang 2009-05-03
  • 打赏
  • 举报
回复 1
问题应该在服务端那边,客户端断开连接后服务端是怎么处理的?是不是马上回到了accept()的地方?
jolong 2009-05-03
  • 打赏
  • 举报
回复
服务端有没有断开与连接时的指针绑定?
D0ckLng 2009-05-03
  • 打赏
  • 举报
回复
就是这样的。端口不能那种方式马上重用。
等待高手更完善的回答。

18,359

社区成员

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

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