我目前正在开发一个分布式网络项目,用于一些网络实践,其想法是将文件从我的服务器发送到几个不同的客户端(分解文件后),客户端将找到字符串的频率并将其返回。
我遇到的问题是如何识别每个客户端并向每个客户端发送数据。 我一直致力于通过端口识别每个客户端的解决方案。问题在于我如何处理多个连接和端口。我知道一旦打开连接等,我必须使用 send() 将数据发送到端口,但我不知道如何跨多个连接执行此操作(我可以使用单个客户端和服务器来执行此操作,但不能使用多个客户端)
有人从高层的角度有什么建议吗?我从一位 friend 那里得到了一个建议,他说:
- 打开套接字
- 监听连接
- 收到连接请求后,生成一个新线程来处理连接。 主进程会回到步骤2监听新的连接,同时新的线程 将处理与关联客户端的所有数据流。
但我不太确定我是否理解这一点...我也一直在引用 http://shoe.bocks.com/net/#socket
谢谢
最佳答案
你的 friend 是对的。按照他提到的前三个步骤进行操作,然后您需要:
生成线程后,将数据(从文件读取)发送到新套接字。
一旦整个文件完成,您应该断开连接并退出线程。在客户端,您应该处理断开连接并可能退出。
注释:
此外,如果您愿意,您可以使用 sendfile() 代替 send()。如果您希望处理所有连接而不生成线程,则可以使用 select()。
引用http://beej.us/guide/bgnet/了解详情。
编辑:
如何识别每个客户?答:这是经典的端口发现问题,但在您的情况下它很简单。服务器应该监听众所周知的端口(例如 12345),并且所有客户端都将连接到它。一旦它们连接起来,服务器就拥有所有的sockfd。你需要使用这些sockfd来发送数据并识别它们。
关于c - 分布式网络多客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8304985/