64,648
社区成员
发帖
与我相关
我的任务
分享
/***************创建socket*******************/
int SD_DSC_SERVER_SOCKET(const char* address, unsigned int port)
{
//初始化 WSA
HANDLE hThread;
WORD sockVersion = MAKEWORD(2,2);
WSADATA wsaData;
if(WSAStartup(sockVersion,&wsaData)!=0)
return 0;
//创建socket
SOCKET ServerSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(ServerSocket == INVALID_SOCKET)
{
cout<<"create socket error!"<<endl;
return 0;
}
//设置 IP 端口号 。。。
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
sin.sin_addr.s_addr = inet_addr(address);
//绑定地址和端口号
if(bind(ServerSocket,(LPSOCKADDR)&sin,sizeof(sin)) == SOCKET_ERROR)
{
cout<<"bind error: address---"<<address<<" port---"<<port<<" "<<GetLastError()<<endl;
Sleep(5000);
return 0;
}
//服务器监听
if(listen(ServerSocket,100) == SOCKET_ERROR)
{
cout<<"listen error"<<" "<<GetLastError()<<endl;
return 0;
}
cout<<"服务端已经启动"<<endl<< "port:"<< port <<endl;
//接收数据
sockaddr_in remoteAddr;
int nAddrlen = sizeof(remoteAddr);
//char revData[1024];
while(1)
{
SOCKET ClientSocket = accept(ServerSocket,(SOCKADDR*)&remoteAddr, &nAddrlen);
if(ClientSocket == INVALID_SOCKET)
{
cout<<"accept error"<<GetLastError()<<endl;
return 0;
}
cout<< "connected one connection:" << inet_ntoa(remoteAddr.sin_addr) << " port:" <<port << endl;
//recv data
hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)ClientSocket, 0, NULL);
/*
recv(ClientSocket,recvchar,1024,0);
cout<<"接收到客户端:"<< inet_ntoa(remoteAddr.sin_addr) << "的信息为:" << recvchar << endl;
*/
if ( hThread == NULL )
{
cout<<"Create Thread Failed!"<<endl;
break;
}
CloseHandle(hThread);
}
closesocket(ServerSocket);
WSACleanup();
return 0;
}
[/quote]
在while(1)循环里能接收到C1,C2的消息再及时转发给对方/***************创建socket*******************/
int SD_DSC_SERVER_SOCKET(const char* address, unsigned int port)
{
//初始化 WSA
HANDLE hThread;
WORD sockVersion = MAKEWORD(2,2);
WSADATA wsaData;
if(WSAStartup(sockVersion,&wsaData)!=0)
return 0;
//创建socket
SOCKET ServerSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(ServerSocket == INVALID_SOCKET)
{
cout<<"create socket error!"<<endl;
return 0;
}
//设置 IP 端口号 。。。
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
sin.sin_addr.s_addr = inet_addr(address);
//绑定地址和端口号
if(bind(ServerSocket,(LPSOCKADDR)&sin,sizeof(sin)) == SOCKET_ERROR)
{
cout<<"bind error: address---"<<address<<" port---"<<port<<" "<<GetLastError()<<endl;
Sleep(5000);
return 0;
}
//服务器监听
if(listen(ServerSocket,100) == SOCKET_ERROR)
{
cout<<"listen error"<<" "<<GetLastError()<<endl;
return 0;
}
cout<<"服务端已经启动"<<endl<< "port:"<< port <<endl;
//接收数据
sockaddr_in remoteAddr;
int nAddrlen = sizeof(remoteAddr);
//char revData[1024];
while(1)
{
SOCKET ClientSocket = accept(ServerSocket,(SOCKADDR*)&remoteAddr, &nAddrlen);
if(ClientSocket == INVALID_SOCKET)
{
cout<<"accept error"<<GetLastError()<<endl;
return 0;
}
cout<< "connected one connection:" << inet_ntoa(remoteAddr.sin_addr) << " port:" <<port << endl;
//recv data
hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)ClientSocket, 0, NULL);
/*
recv(ClientSocket,recvchar,1024,0);
cout<<"接收到客户端:"<< inet_ntoa(remoteAddr.sin_addr) << "的信息为:" << recvchar << endl;
*/
if ( hThread == NULL )
{
cout<<"Create Thread Failed!"<<endl;
break;
}
CloseHandle(hThread);
}
closesocket(ServerSocket);
WSACleanup();
return 0;
}