2011-11-29 75 views
0

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

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

有没有人有任何建议从高层次的立场?我从一个朋友,谁说一个建议:

  1. 打开插座
  2. 监听连接
  3. 当接收到一个连接请求,产生一个新的线程来处理连接。 主进程将返回到步骤2来侦听新连接,而新线程 将处理与关联客户端的所有数据流。

但我真的不知道我理解这个......我也一直在引用http://shoe.bocks.com/net/#socket

感谢

+0

我肯定会建议你不要重新发明遗嘱,并看看分布式编程的开放mpi。 http://www.open-mpi.org/ – Oz123

回答

2

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

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

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

注:

此外,您还可以,如果你想使用的sendfile(),而不是发送()。如果你希望处理所有连接而不产生线程,你可以使用select()。

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

编辑:

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

0

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

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