【问题标题】:Distributed Networking Multiple Clients分布式网络多客户端
【发布时间】:2011-11-29 02:08:23
【问题描述】:

我目前正在为一些网络实践开发一个分布式网络项目,我的想法是将文件从我的服务器发送到几个不同的客户端(分解文件后),客户端将找到字符串的频率并将其退回。

我遇到的问题是如何识别每个客户端并向每个客户端发送数据。 我一直致力于通过端口识别每个客户端的解决方案。问题出现在我如何处理多个连接和端口。我知道一旦打开连接等,我必须使用 send() 将数据发送到端口,但我不知道如何跨多个连接执行此操作(我可以使用单个客户端和服务器执行此操作,但不能使用多个客户)

从高层次的角度来看,有人有什么建议吗?我从一位朋友那里得到了一个建议,他说:

  1. 打开一个套接字
  2. 监听连接
  3. 收到连接请求后,生成一个新线程来处理连接。 主进程会回到第2步监听新的连接,而新的线程 将处理关联客户端的所有数据流。

但我不确定我是否理解这一点...我也一直在引用 http://shoe.bocks.com/net/#socket

谢谢

【问题讨论】:

  • 我绝对建议您不要重新发明遗嘱,并查看用于分布式编程的 open-mpi。 open-mpi.org

标签: c networking network-programming


【解决方案1】:

你的朋友是对的。按照前三个步骤(他提到),然后你需要:

生成线程后,将数据(从文件读取)发送到新套接字。

一旦整个文件完成,您应该断开并退出线程。在客户端,您应该处理断开连接并可能退出。

注意事项:

此外,如果您愿意,您可以使用 sendfile() 代替 send()。如果您希望在不产生线程的情况下处理所有连接,则可以使用 select()。

详情请参考http://beej.us/guide/bgnet/

编辑:

如何识别每个客户?回答:这是经典的端口发现问题,但在您的情况下它很简单。服务器应该正在侦听众所周知的端口(比如 12345),并且所有客户端都将连接到它。一旦它们连接起来,服务器就会拥有所有的 sockfds。您需要使用这些 sockfds 来发送数据并识别它们。

【讨论】:

    【解决方案2】:

    如果您查看networkComms.net,一个开源网络通信库,一旦您创建了与客户端的连接,您可以通过查看它的 NetworkIdentifier 标记(每个客户端唯一的 guid)来跟踪该特定客户端。

    如果您要向所有客户发送大文件,还请查看专为此目的设计的包含的 DistributedFileSystem。

    【讨论】:

      猜你喜欢
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多