c - 用于发送和接收的单套接字多端口或多套接字多端口

标签 c linux sockets

请原谅,因为我无法在不描述我的场景的情况下构建问题。我的场景如下所述,

我有两台机器 machine1 和 machine2 都有自己的 IP 地址。现在我想在它们之间交换消息,我想在一个端口 50 中从 amachine1 向 machine2 发送消息,并在端口号 51 接收来自 machine2 的消息。 我该如何实现,我很困惑是否要在每台机器上为发送和接收创建两个套接字?或者只是不同的端口就可以完成这项工作。我正在使用 C 语言和 Ubuntu linux。提前致谢。

                MACHINE1                                  MACHINE2
                    |                                         |
                    |                 sendto                  |
                 port 50 ---------------------------------->  |
                    |                                         |
                    |                recvfrom                 |
                 port51  <--------------------------------    |
                    |                                         |
                    |                                         |

最佳答案

如果您只想发送和接收数据,TCP/IP 连接就可以了。您需要选择这些机器中的一台作为服务器,例如,一台将在端口 50(服务器)上监听,客户端将连接到它。

您也可以使用 UDP 并在两台不同的机器上使用相同的端口。这是一个选择问题,取决于您要对应用程序执行的操作。

使用 TCP:

机器 1 - 在端口 50 上监听

机器 2 - 连接到机器 1:50

通过此连接,您可以发送和接收数据。

使用 UDP:

机器 1 - 绑定(bind)到端口 50

机器 2 - 绑定(bind)到端口 50

机器1和机器2的IP不同。现在您可以从组合 IP:port 发送和接收数据。

您可以在此处找到示例 (TCP/IP):http://www.thegeekstuff.com/2011/12/c-socket-programming/

对于 UDP,此处:http://gafferongames.com/networking-for-game-programmers/sending-and-receiving-packets/

关于套接字的数量,在您的示例中,连接的每一侧都需要一个套接字,或者每台机器一个。当您打开套接字时,您就可以发送和接收数据。我们说连接是双向的。

关于c - 用于发送和接收的单套接字多端口或多套接字多端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21747429/

相关文章:

c - Linux 被动等待条件更新

c - 读取用户输入时 fgets 段错误

python - 在 Python 中执行带有特殊字符的 Linux 命令

C 和无限大小变量

linux - 如何设置 "something"使用的模块

c - 我应该如何防止硬链接(hard link)攻击?

Python (UNIX) 套接字——读取所有数据

python - 尝试连接套接字时出现错误 10051

我们可以用阻塞套接字制作一个非阻塞服务器吗?

iphone - xcode 中的多个实例 if 语句(iphone)