网络编程碰到的关于套接字的问题,请帮忙看看!

txhby0395 2005-07-28 06:16:33
有一个服务器端为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;
}
}
...全文
137 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
txhby0395 2005-08-10
  • 打赏
  • 举报
回复
谢谢楼上的回答,我看了一个网友给我的一个多线程下载的程序,很好的解决了上面的问题!
yingpf 2005-07-30
  • 打赏
  • 举报
回复
服务器一般要管理多个客户端连接,你可以在服务器端用一个链表来管理,连接进来就加到链表
这样你就可以区别哪个客户端
wrui 2005-07-30
  • 打赏
  • 举报
回复
由于服务器accept()之后,重新产生一个SOCKET用于收发数据,所以和B,C,D收发数据的套节子都不一样,就很好判断了
pp_hotel 2005-07-29
  • 打赏
  • 举报
回复
pDlg->m_GprsTcpClient=WSAAccept(pDlg->m_GprsTcpServer,(SOCKADDR*)&addrGprsTcpClient,&len,NULL,0);

感觉应该是新的连接覆盖了现有的连接,所以只能接收到新的客户端的数据.

建议将成员m_GprsTcpClient改为数组
softrain 2005-07-29
  • 打赏
  • 举报
回复
对你的SOCKET标识即可,不同客户端对应不同的SOCKET。
windcsn 2005-07-29
  • 打赏
  • 举报
回复
有两种办法:
1。不同的CLIENT连接的时候有不同的ACCEPT SOCKET,所以这本身就标识了不同的CLIENT,因为其地址不同/
2.在你发送的应用数据中增加地址信息。
oyljerry 2005-07-29
  • 打赏
  • 举报
回复
把所有的连上的客户端信息保存到一个数组等中
nuaawenlin 2005-07-29
  • 打赏
  • 举报
回复
不同的socket就可以了
windcsn 2005-07-29
  • 打赏
  • 举报
回复
为不同的CLIENT开不同的套节子
oyljerry 2005-07-29
  • 打赏
  • 举报
回复
通过客户端不同的socket来区分好了
netgm 2005-07-28
  • 打赏
  • 举报
回复
保存一个socket 再加点识别信息就行了
收信息需要连带标识进来.

void CDlg_TcpServer::OnGprsTcpServer(WPARAM wParam,LPARAM lParam)//网络事件处理
这样看你能参数怎么.弄了

18,356

社区成员

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

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