c - 分布式网络多客户端

标签 c networking network-programming

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

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

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

  1. 打开套接字
  2. 监听连接
  3. 收到连接请求后,生成一个新线程来处理连接。 主进程会回到步骤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/

相关文章:

c - 警告输出末尾的 gcc 警告标志。这是什么意思?

c - 在 c 中,在 bool 中,true == 1 和 false == 0?

Python同步urllib2结果

sockets - Pub Sub 实现零 mq 3.xx

c - Linux 在使用 PPID 1 重新启动时不会清理资源(套接字)

c - 单声道到立体声转换

C 计算器帮助--无法获取最小值和最大值

networking - 如何将特定客户端(浏览器)动态分配给众多服务器之一?

java - 如何在java DatagramSocket中发送未实现Serialized接口(interface)的对象

android - 如何在没有任何中间服务器的情况下在两个 Android 设备之间发送文件/消息