分布式网络多客户端

时间:2011-11-29 02:08:24

标签: c networking network-programming

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

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

从高层面来看,有没有人有任何建议?我从一位朋友那里得到了一个建议:

  1. 打开套接字
  2. 倾听连接
  3. 收到连接请求时,会生成一个新线程来处理连接。 主要进程将返回到步骤2以侦听新连接,同时新线程 将处理与关联客户端的所有数据流。
  4. 但我不确定我理解这一点......我也一直在引用http://shoe.bocks.com/net/#socket

    由于

2 个答案:

答案 0 :(得分:1)

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

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

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

注意:

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

有关详细信息,请参阅http://beej.us/guide/bgnet/

编辑:

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

答案 1 :(得分:0)

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

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