gpt4 book ai didi

c - UDP - 多服务器单客户端

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:36:35 26 4
gpt4 key购买 nike

我有一台带有 C 代码的 Linux 计算机,它必须通过 UDP 与 4 种不同的设备进行通信。计算机向每个设备发送不同的命令并接收响应,有时是并行的......

我是一个完美的初学者,并设法使用 UDP 套接字与一台设备进行通信。但是现在,我正在寻找一种与所有这些设备进行通信的方法,我想称之为“多路 socket ”,但我不知道去哪里找/搜索什么词来找到一种方法……

我的linux电脑是客户端,所有设备都是服务器。我的计算机上只有一个 eth 端口,必须使用交换机才能访问所有设备。我想创建如下函数:

sendcmd(IPnumber, PORTnumber, cmd , ...)
readbuff(IPnumber, PORTnumber, buff, ...)

所以我可以选择哪个 IP 将接收 cmd ...我不知道是否可能或者我是否需要打开套接字,然后关闭并使用另一个 IP 重做操作 ...

那么,如果我设法让自己被理解,我应该去哪里寻找问题的解决方案?

谢谢!

最佳答案

您可以为您的场景使用单个 UDP 套接字。您可以在应用程序的整个生命周期内保持套接字打开。

UDP 不是面向连接的。 UDP 套接字也不分为客户端套接字和服务器套接字。 UDP 套接字总是绑定(bind)到本地端口,隐式(通常用于纯客户端)或显式(通常用于服务器)。在您的情况下,您不关心 UDP 客户端的端口。

要发送到您的四个 UDP 服务器,您可以使用 sendto()。这使您可以指定 UDP 数据包发送到的目标 IP 地址和端口。

要从您的四个 UDP 服务器接收数据,您可以使用 recvfrom()。这将告知 UDP 数据包来自的 IP 地址和端口。

您很可能想要某种接收循环。如果你想在你的应用程序中做任何其他事情,你很可能想要使 recvfrom() 成为非阻塞的,或者你希望在它自己的线程中有接收循环。但这超出了你的问题。

UDP 最重要的方面是它不是一个协议(protocol)(尽管它的名字具有误导性)。它是协议(protocol)的一 block 拼图。它是开发您自己的协议(protocol)的工具。但我假设您手边已经有了外围设备定义的特定协议(protocol)。

关于c - UDP - 多服务器单客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48285205/

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