服务器socket如何确定发给哪个客户端?
服务器和客户端都用WSAAsyncSelect模式,
void Cmydlg::Onaccept(SOCKET pSock)
{
SOCKADDR_IN cliaddr;
int len=sizeof(cliaddr);
transock=accept(pSock,(SOCKADDR*)&cliaddr,&len);
WSAAsyncSelect(transock,m_hWnd,NETWORK_MESSAGE,FD_READ|FD_WRITE);
}
如果有多个客户端连接的话,服务器的send函数是发给哪个客户端的,如何实现发给指定客户端?
谢谢!
问题点数:20、回复次数:7Top
1 楼FengSC(小猪快跑)回复于 2006-02-16 15:59:09 得分 0
accept得到的socket,就是对应客户断连接的,直接发给它就可以了。Top
2 楼striking(庸人自扰)回复于 2006-02-16 16:13:12 得分 0
transock=accept(pSock,(SOCKADDR*)&cliaddr,&len);
cliaddr包含了客户的信息. ip 和端口Top
3 楼gxrwdsq()回复于 2006-02-17 09:18:57 得分 0
可是send函数int PASCAL FAR send (SOCKET s, const char FAR * buf, int len, int flags)
第一个参数应该是发送端的socket吧,
该函数并没有客户端的任何信息,
是不是说一旦有连接来的时候执行accept函数,建立新socket,而又有连接来,又建立个socket
那第一个建立的socket还在么,应该不在了吧,
我想建个socket数组应该能行吧?
我刚开始学socket,对一些原理不是很明白,忘大家指教!Top
4 楼redf0x_1(雪逸红狐)回复于 2006-02-17 10:02:10 得分 0
第一个SOCKET是发送端的SOCKET
当执行accept函数时,会返回一个socket,该socket就是为刚刚接受到的连接创建的新的socket
而原先的socket(即执行accept的socket)并不会消失,除非你手动撤除了该SOCKET,它才会消失
当然可以建立SOCKET数组Top
5 楼level1979(岳麓飘湘)回复于 2006-02-17 12:03:35 得分 10
一般来说服务器端的一个Socket对应一个客户端,也就是说,如果你在客户端连接时对连接上的Socket进行标示,那么就可以向特定的客户端通信了Top
6 楼beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)回复于 2006-02-17 13:04:22 得分 10
可是send函数int PASCAL FAR send (SOCKET s, const char FAR * buf, int len, int flags)
第一个参数应该是发送端的socket吧,
该函数并没有客户端的任何信息,
是不是说一旦有连接来的时候执行accept函数,建立新socket,而又有连接来,又建立个socket
那第一个建立的socket还在么,应该不在了吧,
我想建个socket数组应该能行吧?
我刚开始学socket,对一些原理不是很明白,忘大家指教!
----------
这样 可以啊。你把先前建立的socket连接保存起来就是了。Top
7 楼Hylas(羽心)回复于 2006-02-17 17:33:55 得分 0
在通信层,socket 对应连接
在应用层,搞一个登入,把socket---client对应起来
通信层,操作socket
应用层,操作clientTop




