我目前正在为一些网络实践开发分布式网络项目,其目的是将文件从我的服务器发送到几个不同的客户端(在分解文件后),客户端将找到字符串的频率并将其归还。
我遇到的问题是如何识别每个客户端并向每个客户端发送数据。 我一直致力于通过端口识别每个客户端的解决方案。问题出现在我如何处理多个连接和端口。我知道在打开连接等之后我必须使用send()将数据发送到端口但我不知道如何跨多个连接执行此操作(我可以使用单个客户端和服务器执行此操作但不能使用多个客户)
从高层面来看,有没有人有任何建议?我从一位朋友那里得到了一个建议:
但我不确定我理解这一点......我也一直在引用http://shoe.bocks.com/net/#socket
由于
答案 0 :(得分:1)
你的朋友是对的。按照前三个步骤(由他提到)然后你需要:
产生线程后,将数据(从文件读取)发送到新套接字。
完成整个文件后,应断开连接并退出线程。在客户端,您应该处理断开连接并可能退出。
注意:
此外,如果您愿意,可以使用sendfile()而不是send()。如果您希望在不生成线程的情况下处理所有连接,则可以使用select()。
有关详细信息,请参阅http://beej.us/guide/bgnet/。
编辑:
如何识别每个客户? Ans:这是经典的端口发现问题,但在你的情况下它很简单。服务器应该监听众所周知的端口(例如12345),所有客户端都将连接到它。一旦连接,服务器就有了所有的sockfds。您需要使用这些sockfds来发送数据并识别它们。
答案 1 :(得分:0)
如果您查看了networkComms.net,一个开源网络通信库,一旦您与客户建立了连接,您可以通过查看它的NetworkIdentifier标记来跟踪该特定客户端,该标记是每个客户端唯一的guid
如果您要向所有客户发送大型文件,请查看为此目的专门设计的包含的DistributedFileSystem。