Socket 反复连接时会失败,求原因

wxliangzyt 2014-10-31 02:26:37

while(pcs->m_thexit)
{

Sleep(2000);
pcs->m_ConSerflg=FALSE;//与服务器连接失败或未连接上
try
{
if (!pcs->WinSockInit())
{
AfxMessageBox(_T("Socket 库初始化失败!"));
return FALSE;
}
pcs->m_ServerSocket = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP);
if (pcs->m_ServerSocket == INVALID_SOCKET)
{
lstxt="SOCKET创建失败,请重启.........";
return TRUE;
}
sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(9527);
server.sin_addr.s_addr = inet_addr("192.168.1.1");
/////////////////////////////////////////////////////////////
lircons=0;
while(pcs->m_thexit)
{
liconr=-1;
liconr=connect(pcs->m_ServerSocket, (struct sockaddr *)&server, sizeof(struct sockaddr));
if (liconr == SOCKET_ERROR )
{
pcs->is_rboot=TRUE;
memset(loginlog1,0,sizeof(loginlog1));
MultiByteToWideChar(CP_ACP, 0, "连接服务器失败,正在试图重新连接", -1, loginlog1, sizeof(loginlog1));
pcs->m_pWnd->PostMessage(WM_ADD_EDIT,(DWORD)0,(LPARAM)(LPCTSTR)loginlog1);
lircons++;
Sleep(3000);
if (lircons>=50)
{
pcs->StopServer();
Sleep(10000);
CString sysname;
sysname="wwatutstart.exe";
pcs->RestarSys(sysname);
TerminateProcess(GetCurrentProcess(),0);
return TRUE;
}
}
else
{
break;
}
}
pcs->is_rboot=TRUE;
GetLocalTime(&pcs->is_discontime);
iRet = recv(pcs->m_ServerSocket, (char *)szBuf, Recv_BUF_SIZE, 0);
if (iRet>0)
{
......................
}
else
{
closesocket(pcs->m_ServerSocket);
WSACleanup();
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format(_T("clent__Workheahtsend:%s"),e.ErrorMessage());
pcs->wApp->writelogs(errormessage);
}
}

我这里,采用while来不断连接,因为,该程序启动后只要不断电,就会一直运行,如果网络断了,就自动连接服务器,我测试过很多次,如果连接的次数多了的话,在执行connect(pcs->m_ServerSocket, (struct sockaddr *)&server, sizeof(struct sockaddr));时,就会卡起,求原因。。。。。。。。。。。。。。。
...全文
771 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Marcelxx 2014-11-27
  • 打赏
  • 举报
回复
看看连接失败的返回值。
jianghandaxue 2014-11-25
  • 打赏
  • 举报
回复
频繁反复的连接,可能会导致句柄资源被耗尽 建立一个长连接Socket
dvlinker 2014-11-24
  • 打赏
  • 举报
回复
如果链接一直要用的话,建立长连接就好了
dvlinker 2014-11-24
  • 打赏
  • 举报
回复
不用频繁的创建socket对象,弄一个成员变量或者全局变量
聚义舔刀 2014-11-24
  • 打赏
  • 举报
回复
connect在连接一个不存在的主机时会阻塞很久。会不会跟这个有关系。卡住的时候,要connect的主机时什么状态?
笨笨仔 2014-10-31
  • 打赏
  • 举报
回复
第一次看到要用循环来维护的网络连接

18,356

社区成员

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

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