我正在尝试让我的应用程序与应用程序MAVProxy进行通信,该应用程序将数据包发送到侦听端口udp:127.0.0.1:14551
的任何其他应用程序。
当我的代码(取自here)正在执行且MAVProxy正在运行并且我运行
sudo tcpdump -i lo -n udp port 14551
输出
06:30:21.754884 IP 127.0.0.1.14551 > 127.0.0.1.14551: UDP, length 41
这意味着我的程序侦听端口14551
并将数据包发送到同一端口。这不是我想要的。以下是我的代码:
int main(){
int udpSocket, nBytes;
struct sockaddr_in serverAddr;
struct sockaddr_storage serverStorage;
socklen_t addr_size;
mavlink_msg_command_long_pack(mavlink_system.sysid, mavlink_system.compid, &msg, targetSysId,targetCompId, MAV_CMD_NAV_TAKEOFF, 0, 0, 0, 0, 0, 0, 0, 20);
len = mavlink_msg_to_send_buffer(buf, &msg);
udpSocket = socket(PF_INET, SOCK_DGRAM, 0);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(14551);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
// Enabling broadcasting
int broadcastEnable = 1;
setsocketopt(udpSocket, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable));
memset(serverAddr.sin_zero, '\0', sizeof serverAddr.sin_zero);
bind(udpSocket, (struct sockaddr *) &serverAddr, sizeof(serverAddr));
addr_size = sizeof serverStorage;
while(1){
sendto(udpSocket,buf,len,0,(struct sockaddr *)&serverAddr,addr_size);
}
return 0;
}
更新
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:5353 0.0.0.0:* -
udp 0 0 0.0.0.0:5501 0.0.0.0:* 18485/arducopter
udp 0 0 0.0.0.0:34674 0.0.0.0:* 18479/python
udp 0 0 0.0.0.0:14550 0.0.0.0:* 18556/apmplanner2
udp 213504 0 0.0.0.0:14551 0.0.0.0:* 18683/nav
udp 0 0 0.0.0.0:43852 0.0.0.0:* 18479/python
这些是通过UDP进行通信的前提。现在,18479/python
希望与14550
和14551
进行通信。 apmplanner2
可以与18478/python
成功通信,但nav
不能。 nav
只是自言自语。
如何让我的程序获得端口14551
并与希望在此端口上进行通信的人进行通信?