socket如何确认多用户
单终端连接的时候,一切正常,
再引入一个新的终端的情况下,新终端能正常收发SOCKET包,旧终端连接收不到东西,
个人分析是因为新终端引入后执行SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);将原终端的套接字覆盖掉了,这样导致在旧终端线程处理SEND命令(通过sockSrv)发给旧终端的消息都出现错误。
请高手看代码指教问题所在。
//与终端建立连接处理;
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return 1;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup();
return 1;
}
SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
if(sockSrv==INVALID_SOCKET)
{
WSACleanup();
return 1;
}
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);
if(bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))==SOCKET_ERROR) //绑定
{
closesocket(sockSrv);
return 1;
}
if(listen(sockSrv,100)==SOCKET_ERROR) //监听 第二参数等待连接队列的最大长度.
{
closesocket(sockSrv);
return 1;
}
SOCKADDR_IN addrClient;
int len = sizeof(addrClient);
while(1)
{
sqldata.sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len); //阻塞
if( sqldata.sockConn == INVALID_SOCKET )
{
AfxMessageBox("Socket Connect Fail!");
closesocket(sqldata.sockConn);
return 1;
}
rbThread = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)ThreadStart, (LPVOID)&sqldata,0,0); //创建线程,处理与客户端的通信
if(rbThread == NULL)
{
closesocket(sqldata.sockConn);
CloseHandle(rbThread);
return 1;
}
}
closesocket(sockSrv);
sockSrv = INVALID_SOCKET;
WSACleanup();