服务器端select socket频繁连接客户端

zhji09 2008-06-11 02:18:21
主动连接端:
WSADATA wsaData;
//在这里初始化网络,初始化WSADATA结构
if (WSAStartup (MAKEWORD(2,2), &wsaData) != 0)
{
//ShowMessage("启动Socket 2.2库失败!!");
return false;
}
SOCKET sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN addr_Term;
addr_Term.sin_family=AF_INET;
addr_Term.sin_addr.s_addr=inet_addr(Ip.c_str());
addr_Term.sin_port=htons(4804);



unsigned long ul=1;
int ret=ioctlsocket(sock,FIONBIO,(unsigned long *)&ul);
connect(sock,(struct sockaddr *)&addr_Term,sizeof(addr_Term));
//select 模式
struct timeval timeout;
fd_set r;
FD_ZERO(&r);
FD_SET(sock,&r);
timeout.tv_sec=0;
timeout.tv_usec=1000;
ret=select(0,0,&r,0,&timeout);

if(ret<=0)
{

unsigned long ull=0;
ret=ioctlsocket(sock,FIONBIO,(unsigned long *)&ull);
shutdown(sock,2);
closesocket(sock);
WSACleanup();
return false;
}
else
{
unsigned long ull=0;
ret=ioctlsocket(sock,FIONBIO,(unsigned long *)&ull);
shutdown(sock,2);
closesocket(sock);
WSACleanup();
return true;
}

客户端:
listen(sOnLineListen,5);
int iSize=sizeof(addr_OnLine_Remote);
do
{
sOnLineRecv=accept(sOnLineListen,(struct sockaddr *) &addr_OnLine_Remote,&iSize);
if(sOnLineRecv==INVALID_SOCKET)
{
//AfxMessageBox("accept error,"+WSAGetLastError());
closesocket(sOnLineRecv);
WSACleanup();
continue;
}
shutdown(sOnLineRecv,2);
closesocket(sOnLineRecv);
sOnLineRecv=INVALID_SOCKET;

}while(true);
主动连接端,每次这样连接客户端,就是为了检测一下客户端在不在就行了,
这是我想出来的办法,如果哪位认为还有更好的办法,给各提示也好,
没有更好的办法的话,看看这里有什么问题。
问题是:
隔次连接成功:一次可以连接上,一次又不可以,周而复始。
谢谢。
...全文
196 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
偶像罗斯福 2008-06-11
  • 打赏
  • 举报
回复
代码给的还是不全。connect(sock,(struct sockaddr *)&addr_Term,sizeof(addr_Term)); 后作一个判断。看连接是否成功了。有可能是这里再出错那。最后在accept后也加一个,看看你建立连接后accept是否过了那。。。

18,356

社区成员

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

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