问题描述:
我想创建一个socket的server端,同时接受多个client,然后与这几个client进行相互通信。
我的处理过程是这样的:
1,创建一个套接字:m_socket=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,0);
2,绑定一个套接字:bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));
3,注册网络事件:WSAAsyncSelect(m_socket,m_hWnd,UM_SOCK,FD_READ|FD_WRITE|FD_ACCEPT);
4,设置侦听和最大连接数:listen(m_socket,3);
5,接受连接: if(socket!=0)
{
socket=accept(m_socket,NULL,NULL);
}
else if(socket1!=0)
{
socket1=accept(m_socket,NULL,NULL);
}这部分未做测试,不知道正确与否;
6,收发数据:
关键问题,如何判断,读到的数据是哪个client发出的。
单连接的话,我用的是:WSARecv(socket,&wsabuf,1,&dwRead,&dwFlag,NULL,NULL);
要实现多连接的话,这部分该怎么处理?
我想创建一个socket的server端,同时接受多个client,然后与这几个client进行相互通信。
我的处理过程是这样的:
1,创建一个套接字:m_socket=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,0);
2,绑定一个套接字:bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));
3,注册网络事件:WSAAsyncSelect(m_socket,m_hWnd,UM_SOCK,FD_READ|FD_WRITE|FD_ACCEPT);
4,设置侦听和最大连接数:listen(m_socket,3);
5,接受连接: if(socket!=0)
{
socket=accept(m_socket,NULL,NULL);
}
else if(socket1!=0)
{
socket1=accept(m_socket,NULL,NULL);
}这部分未做测试,不知道正确与否;
6,收发数据:
关键问题,如何判断,读到的数据是哪个client发出的。
单连接的话,我用的是:WSARecv(socket,&wsabuf,1,&dwRead,&dwFlag,NULL,NULL);
要实现多连接的话,这部分该怎么处理?
然后每次对保存下来的IP地址通过它进行识别`~~~
不如,这个数据是socket发过来的,我用socket1去读,返回错误代码,只有用socket去读,才能获得它的数据。
不如,这个数据是socket发过来的,我用socket1去读,返回错误代码,只有用socket去读,才能获得它的数据。
我的意思是想说:你可以像QQ这样,当客户端请求登陆时,在和服务器端进行连接的时候,记录下它的登陆信息,用于以后区别是哪个socket,可以通过accept,来创建新的SOCKET用于接受请求,这个新的SOCKET主要是用于后来的数据的收发~~~
你要做的工作是要将这些用于连接的SOCKET用多线程或者放到链表中~
然后通过上面的登陆信息来判别~~~
http://www.codeproject.com/internet/barryschatsystem.asp
{
socket=accept(m_socket,NULL,NULL);
}
else if(socket1!=0)
{
socket1=accept(m_socket,NULL,NULL);
}这部分未做测试,不知道正确与否;
/////////////////////////////////////////////////
if(socket1!=INVALID_SOKCET)
{
socket1=accept(m_socket,NULL,NULL);
}
关键问题,如何判断,读到的数据是哪个client发出的。
单连接的话,我用的是:WSARecv(socket,&wsabuf,1,&dwRead,&dwFlag,NULL,NULL);
要实现多连接的话,这部分该怎么处理?
////////////////////////////////////////////////
保存客户端socket描述字具体参考www.vckbase.comWindows网络编程
感谢你的指点,第一个bug,已经解决掉了,
现在我把所有连接上来的client端地址,都保存下来了,但是,怎么运用到fd_read中去呢?