网络编程碰到的关于套接字的问题,请帮忙看看!
有一个服务器端为A,有B、C、D三个客户端,现在我在服务器A端侦听了6800端口,等待客户端来进行连接,假如现在三个客户端B、C、D都已经连接到了服务器端,并且都向服务器发送数据,服务器端如何判断是哪个客户端发来的数据。下面是部分代码,它只能接收最近连接到服务器端的客户端发来的数据!
UINT RecvGprsTcpPro(LPVOID lpParam)//客户端连接处理线程
{
int err=0;
int recvLen=0;
CDlg_TcpServer* pDlg=(CDlg_TcpServer*)lpParam;
SOCKADDR_IN addrGprsTcpClient;
int len=sizeof(SOCKADDR);
char recvBuf[MAX_PACK_LEN]={0};
while (b_IsRun_GprsTcp)
{
pDlg->m_GprsTcpClient=WSAAccept(pDlg->m_GprsTcpServer,(SOCKADDR*)&addrGprsTcpClient,&len,NULL,0);
char gprstcp_client[25]={0};
sprintf(gprstcp_client,"%s:%d",inet_ntoa(addrGprsTcpClient.sin_addr),ntohs(addrGprsTcpClient.sin_port));
pDlg->SplitIpPack_ClientInfo(gprstcp_client);
WSAAsyncSelect(pDlg->m_GprsTcpClient,pDlg->m_hWnd,UM_GPRSTCP_SERVER,FD_CLOSE|FD_READ|FD_WRITE);
Sleep(2);
}
return 0;
}
void CDlg_TcpServer::OnGprsTcpServer(WPARAM wParam,LPARAM lParam)//网络事件处理函数
{
switch(LOWORD(lParam))
{
case FD_CLOSE:
AfxMessageBox("FD_CLOSE!");
break;
case FD_READ:
AfxMessageBox("FD_READ!");
break;
case FD_WRITE:
AfxMessageBox("FD_WRITE!");
break;
}
}