我有一个FPGA设备,我的代码需要与之交谈。协议如下:
我发送一个非零字节(UDP)来打开一个功能。然后FPGA板开始在我发送的端口上喷出数据。
你看到我的困境吗?我知道我将消息 发送到 的端口,但我不知道我 发送的端口 (是这个端口通常不是由操作系统自动选择的吗?)。
我对我应该做的最好的猜测是创建一个包含目标IP和端口号的套接字,然后重新使用套接字进行接收。如果我这样做,它是否已经设置为侦听我发送原始消息的端口?
另外,为了您的信息,此代码的变体将用Python和C#编写。我可以查找特定的API,因为它们都遵循BSD套接字模型。
答案 0 :(得分:2)
这正是connect(2)
和getsockname(2)
的用途。作为连接UDP套接字的奖励,您不必在每次发送时指定目标地址/端口,您将能够发现不可用的目标端口(来自目标的ICMP回复将在下一次发送时显示为错误而不是丢弃),你的操作系统不必在每次发送时隐式连接和断开UDP套接字,节省了一些周期。
答案 1 :(得分:1)
您可以bind
到特定端口的套接字,请检查man bind
答案 2 :(得分:0)
您可以bind套接字来获取所需的端口。
这样做的唯一问题是,您无法在计算机上一次运行多个程序实例。
答案 3 :(得分:0)
您正在使用UDP发送/接收数据。只需创建一个新的UDP套接字并绑定到您想要的接口/端口。然后指示您的FPGA程序将UDP数据包发送回您绑定的端口。 UDP不要求您监听/设置连接。 (只有TCP需要)