gpt4 book ai didi

点对点聊天中程序的多个实例之间的通信 - C 语言

转载 作者:行者123 更新时间:2023-11-30 17:36:54 29 4
gpt4 key购买 nike

我正在编写一个点对点聊天程序。在此程序中,客户端和服务器功能写入一个唯一的文件中。首先我想问一下我程序中的机制是否正确?

  1. I fork() two processes, one for client functionality and one for server functionality
  2. In server process, I initialize sockets, do bind(), listen(). Then I use select() to handle for multi-connections from clients. In client process, I initialize socket, do connect().
  3. When the first peer is created, the client process doesn't have any server to connect with, so it just waits until other peers appear. In this case, I just initialize a socket and wait.
  4. When next peers are created, their client processes initialize sockets, do connect() and send information to server process of the first peer to ask for joining.
  5. In server process, I receive information after select() returns and send a feedback to the client process of sender.

第二,比如我的程序叫“p2p”。我在一个终端中启动一个实例(从我的程序),比方说,通过运行“p2p Name_of_group Port_Number_for_Server_Side”来启动 P2P1。这是网络的第一个对等点,它定义了一个组的名称、一个要监听的端口。现在我运行另一个实例(在另一个终端中),假设通过运行“p2p Name_of_group Port_Number_for_Server_Side”来运行 P2P2。第二个对等点指出它想要加入的组的名称以及监听其服务器进程的端口。

P2P2 的客户端进程通过向服务器进程 P2P1 发送其信息来连接到 P2P1 的服务器进程。然而,在这种情况下,P2P2的客户端进程不知道在P2P1的服务器进程中初始化以打开端口的套接字的值。所以我的问题是当P2P2想要使用send()和recv()与P2P1通信时如何从P2P1获取这些信息?非常感谢您的回复。

最佳答案

第一个问题:我更愿意使用一个进程而不是两个进程,因为数据交换会更简单。然后在单线程解决方案(从网络和循环中的用户输入中选择没有超时的 select()ing)或双线程解决方案之间进行选择,我可能会保留 2 个线程,这有点复杂,但对用户。

机制的其余部分似乎是正确的,但可能会根据第二个问题所需的实现而有所不同

第二个问题:我认为您始终需要传递至少一个事件客户端的主机名:端口作为参数。

我会开发这个解决方案:如果主机名:端口没有传递,那么客户端什么也不做(它可能是网络的第一个节点);如果存在此类信息,那么客户端首先应该尝试连接到给定的地址。

第一次联系后应该跟一个特殊的命令,使联系的服务器共享网络中每个其他事件节点的信息。在您的情况下,我会将 P2P2 启动为“p2p Name_of_group Port_Number_for_Server_Side Port_Number_of_P2P1”。然后

  • P2P2 连接到 P2P1 并请求其他节点
  • P2P1 回答是唯一的节点
  • 现在 P2P1 和 P2P2 都知道网络由两个节点组成

现在,您可以将 P2P3 启动为“p2p Name_of_group Port_Number_for_Server_Side Port_Number_of_P2P1”或“p2p Name_of_group Port_Number_for_Server_Side Port_Number_of_P2P2”。假设您将其连接到 P2P2

  • P2P3 连接到 P2P2 并请求其他事件节点
  • P2P2 回复有关 P2P1 的地址信息
  • P2P3 连接到 P2P1,并且不要求任何东西(或者如果您愿意,您可以是多余的)

关于点对点聊天中程序的多个实例之间的通信 - C 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22547402/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com