0

我有一个 FPGA 设备,我的代码需要与之通信。协议如下:

我发送一个非零字节 (UDP) 来打开一个功能。然后 FPGA 板开始在我发送的端口上喷出数据。

你看到我的困境了吗?我知道我将消息发送哪个端口,但我不知道我从哪个端口发送(操作系统通常不会自动选择此端口吗?)。

我应该做的最好的猜测是创建一个带有目标 IP 和端口号的套接字,然后重用该套接字进行接收。如果我这样做,它是否已经设置为侦听我发送原始消息的端口?

此外,供您参考,此代码的变体将使用 Python 和 C# 编写。我可以查找特定的 API,因为它们都遵循 BSD 套接字模型。

4

4 回答 4

2

这正是目的connect(2)getsockname(2)目的。作为连接 UDP 套接字的奖励,您不必在每次发送时指定目标地址/端口,您将能够发现不可用的目标端口(来自目标的 ICMP 回复将在下一次发送时显示为错误,而不是丢弃),并且您的操作系统不必在每次发送时隐式连接和断开 UDP 套接字,从而节省一些周期。

于 2009-11-20T04:13:59.230 回答
1

您可以bind将套接字连接到特定端口,检查man bind

于 2009-11-20T03:35:15.780 回答
0

您可以绑定套接字以获取所需的端口。

这样做的唯一问题是您将无法在计算机上一次运行多个程序实例。

于 2009-11-20T03:34:31.837 回答
0

您正在使用 UDP 发送/接收数据。只需创建一个新的 UDP 套接字并绑定到您想要的接口/端口。然后指示您的 FPGA 程序将 UDP 数据包发送回您绑定的端口。UDP 不需要您侦听/设置连接。(仅 TCP 需要)

于 2009-11-20T03:45:47.040 回答