客户端程序基于TCP/IP连接服务器 int err;
//设置非阻塞方式连接
unsigned long ul = 1;
err = ioctlsocket(ConnectSocket, FIONBIO, (unsigned long*)&ul);
if(err == SOCKET_ERROR)
{
return;
}
connect(ConnectSocket,(const struct sockaddr *)&AddrConnect,sizeof(AddrConnect));
//select 模型设置超时
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(ConnectSocket, &r);
timeout.tv_sec = 20; //连接超时20秒
timeout.tv_usec =0;
err = select(0, 0, &r, 0, &timeout);
if ( err <= 0 )
{
::closesocket(ConnectSocket);
return;
}
//非锁定模式套接设回阻塞模式
unsigned long ul1= 0 ;
err = ioctlsocket(ConnectSocket, FIONBIO, (unsigned long*)&ul1);
if(err==SOCKET_ERROR)
{
::closesocket (ConnectSocket);
return;
}
其中connect和select都是放在线程中处理的
会不会因连接的超时而引起线程的挂起?
//设置非阻塞方式连接
unsigned long ul = 1;
err = ioctlsocket(ConnectSocket, FIONBIO, (unsigned long*)&ul);
if(err == SOCKET_ERROR)
{
return;
}
connect(ConnectSocket,(const struct sockaddr *)&AddrConnect,sizeof(AddrConnect));
//select 模型设置超时
struct timeval timeout ;
fd_set r;
FD_ZERO(&r);
FD_SET(ConnectSocket, &r);
timeout.tv_sec = 20; //连接超时20秒
timeout.tv_usec =0;
err = select(0, 0, &r, 0, &timeout);
if ( err <= 0 )
{
::closesocket(ConnectSocket);
return;
}
//非锁定模式套接设回阻塞模式
unsigned long ul1= 0 ;
err = ioctlsocket(ConnectSocket, FIONBIO, (unsigned long*)&ul1);
if(err==SOCKET_ERROR)
{
::closesocket (ConnectSocket);
return;
}
其中connect和select都是放在线程中处理的
会不会因连接的超时而引起线程的挂起?
解决方案 »
- error lnk2019 无法解析的外部符号
- 如何去掉已经绘出来的图片
- 晕了,为什么我的工程在vc6.0的completeword和参数显示都没有了?
- 请问怎么给滚动条发消息让他下移一格,就相当于SB_LINEDOWN了一下。
- 关于OnSize();
- 想做类似于oicq那样单击会自动下拉上拉的东西
- 难道这个问题真的这么难!!!!怎么把多文档,客户区向下凹变成平的???怎么没人回答啊。
- mfc存在内存泄漏?
- vc,windows编程难题!!熟悉输入法,active控件,windows消息处理,汉字多字节,unicode的兄弟快上呀,我想破头了,没救了
- 如何把CString类转化为浮点数
- 犹豫不决, 再问一下毕业生就业问题
- WSAGetLastError 返回 10065,怎么解决?
我就是判断socket上是否可以写数据,从而判断是否连接成功
//select 模型设置超时
struct timeval timeout;
fd_set r;
FD_ZERO(&r);
FD_SET(ConnectSocket, &r);
timeout.tv_sec = 20; //连接超时20秒
timeout.tv_usec =0;
err = select(0, 0, &r, 0, &timeout);
if ( err <= 0 )
{
g_bNetFlag = FALSE;
::closesocket(socket);
return 5;
}
else
{
g_bNetFlag = TRUE;
}上面是连接部分的代码,代码绝对没问题
HANDLE hThread;
hThread = CreateThread(NULL,0,ThreadLINK,(LPVOID)LINKPORT,0,NULL);
Sleep(4000);//Sleep的时间设置短些的时候就连接不上了,长的时候就可以
CloseHandle(hThread);
你要到下面的select(0, 0, &r, 0, &timeout);设置等待时间判断有没有连接成功
connect也不能立刻成功
按我说的自己调试一下。希望对你有帮助。我的电邮:[email protected] 希望可以和大家交流相关的技术。
对不起 打错字了