18,356
社区成员
发帖
与我相关
我的任务
分享
void TestSocketServer( void )
{
WSADATA wsaData;
if (WSAStartup(0x0202, &wsaData)!=0)
{
return;
}
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
int nRet = 0;
fd_set fd;
while(1)
{
FD_ZERO(&fd);
FD_SET(sockConn, &fd);
nRet = select(0, &fd, NULL, NULL, NULL);
if (nRet == SOCKET_ERROR)
{
closesocket(sockConn);
return ;
}
else if (nRet == 0)
{
closesocket(sockConn);
return ;
}
if (FD_ISSET(sockConn, &fd))
{
MSG_HEADER msg1;
int len = recv(sockConn, (char*)&msg1, sizeof(MSG_HEADER), 0);
if (len <= 0)
{//总是在这个地方接收0长度,完全没有阻塞
continue;
}
switch (msg1.msgType)
{
case C_CMD_LOGIN:
{
//send(sockConn, (char *)&lgmsg, sizeof(LoginMsg_S), 0);
}
break;
case C_CMD_HEARD:
{
}
break;
case C_CMD_REGISTR:
{
}
break;
case C_CMD_RESOLVE:
{
//send(sockConn, (char *)&lgmsg, sizeof(LoginMsg_S), 0);
}
break;
}
}
}
closesocket(sockConn);
}