请教一个socket断开重连问题,该如何实现?

小菜鸟总是被攻击 2012-01-05 05:45:43
void ConnServer()
{
hsocket = socket(AF_INET, SOCK_STREAM, 0);

WSAAsyncSelect(hsocket, hDWnd, WM_SOCKET, FD_CONNECT | FD_READ | FD_CLOSE);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr(szIPAddress);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(IPPort);

connect(hsocket, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
}

void DisConn()
{
closesocket(hsocket);
hsocket = NULL;

SetTimer(hDWnd, TimerReConn, 1000, NULL);
}
我使用上面的代码:
在case FD_CONNECT: 里收到断开消息,调用DisConn
在TimerReConn里面调用ConnServer()进行重连,但是如果服务器有时关机了,而客户端重连数比较多,比如200个,会造成客户端完全无法上网.
IE都打不开,是不是资源给耗尽了,还是我代码哪里出问题了?谁能帮帮我,头疼了好久的一个问题.谢谢了,
...全文
352 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxi666 2012-01-12
  • 打赏
  • 举报
回复
在你的业务需求中,客户端和服务器端之间需要保持几个链接?
如果只需要保持一个链接,那么你客户端的那个hsocket就不要是临时变量,把这个改成类的成员变量或者全局变量。在你的ConnServer函数中,判断这个值是否为INVALID_SOCKET,从而避免重复创建套接字来连接服务器端。
Eleven 2012-01-10
  • 打赏
  • 举报
回复
在TimerReConn里面调用ConnServer()进行重连,但是如果服务器有时关机了,而客户端重连数比较多,比如200个,会造成客户端完全无法上网.
-------------
设置个连接超时,如果在指定的时间内连接不上服务器,就释放套接字资源
lijianli9 2012-01-10
  • 打赏
  • 举报
回复
1楼正解。
oyljerry 2012-01-09
  • 打赏
  • 举报
回复
断开连接后,把Socket也要释放,不然会消耗系统资源
fishion 2012-01-06
  • 打赏
  • 举报
回复
closesocket(hsocket);
shutdown(hsocket);
hsocket = NULL;

还有就是你得判断 socket, WSAAsyncSelect, connect等方法的返回值,看看连接是否成功。定时器用了就记得关闭

18,356

社区成员

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

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