UDP - 多服务器单客户端

时间:2018-01-16 15:56:03

标签: c linux sockets udp

我有一台带有C代码的linux计算机必须使用4个不同的设备在UDP中进行通信。计算机向每个设备发送不同的命令并接收响应,有时并行...

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

我的linux计算机是客户端和所有设备服务器。我在计算机上只有一个eth端口,必须使用一个开关才能访问所有设备。我想创建像:

这样的函数
sendcmd(IPnumber, PORTnumber, cmd , ...)
readbuff(IPnumber, PORTnumber, buff, ...)

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

所以,如果我设法让自己明白,我应该在哪里寻找解决问题的方法?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

UDP最重要的方面是它不是一个协议(尽管它的名称具有误导性)。这是协议的一个难题。它是开发自己的协议的工具。但我假设您已经有一个由您的外围设备定义的特定协议。