服务器端Recv函数

来源:百度知道 编辑:UC知道 时间:2024/06/24 01:44:45
创建一个C/S程序,启动服务器端程序,然后连接2个客户端程序A和B,现在让客户端A发送信息到服务器,然后让服务器转发给客户端B。
在这个过程中,当服务器accept客户端A的连接时,会返回一个套接字m_socketA,之后,服务器端用m_socketA与客户端A通信;同样,当客户端B发送连接请求时,服务器端accept客户端B的连接时,也会返回一个套接字m_socketB,之后,服务器端用m_socketB与客户端B通信。
现在的问题是:当A向服务器发送信息时,服务器端调用Recv接收数据,其中使用m_socketA作为第一个参数;当B向服务器发送信息时,服务器端调用Recv接收数据,其中使用m_socketB作为第一个参数。当然,这是人为分析的,但是在服务器端程序中,调用Recv时,能否确定,该使用哪一个套接字?也就是:recv(socket, buf, strlen(buf)...);中,当有信息发送到服务器的时候,服务器怎样判断该用哪一个套接字作为参数?是m_socketA,还是m_socketB?怎样确定呢?发送的时候,send(socket,..)中,socket,用哪一个呢?此时只需用对方的套接字,因为只有2个客户端,而且只是为了实现信息从A->服务器->B这一应用。
请高手解决一下!不胜感激!!!
问题:
1.在服务器端程序中,调用Recv时,能否确定,该使用哪一个套接字?也就是:recv(socket, buf, strlen(buf)...);中,当有信息发送到服务器的时候,服务器怎样判断使用哪一个套接字作为参数去接收信息?是m_socketA,还是m_socketB?怎样确定呢?

2.怎样判定信息是从哪一个客户端发送过来的呢?

3.发送的时候,send(socket,..)中,socket,用哪一个呢?此时只需用对方的套接字,因为只有2个客户端,而且只是为了实现信息从A->服务器->B这一应用。

socket开发的基本思路是:
服务器端:接收数据的socket套接字与具体端口绑定,在指定的端口上接收数据。例如socket1在80端口上接收数据,socket2在8000上接收数据,那么socket1接收的数据肯定是来自80端口,socket2接收的数据肯定是来自8000端口。
客户端:每个应用往哪个端口上发数据应该是明确的,例如客户端A向指定ip的80端口发送数据,客户端B向8000端口上发送数据。

呵呵,希望上述回答对你有所启发。

一:select模型
二:WSAAsyncSelect模型
三:WSAEventSelect模型
四:Overlapped I/O 事件通知模型
五:Overlapped I/O 完成例程模型
六:IOCP模型

如果仅仅普通阻塞方式,就一个socket对应一个接收线程吧。
当然要想办法把客户端相关信息,例如:名称,性别等与Socket句柄搞关系-.-,这样就知道那个socket对应那个客户端了

如果可以的话 发给我 帮你看看