设置UDP套接字连接Linux

时间:2017-05-10 04:50:01

标签: networking udp

我正在尝试让我的应用程序与应用程序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希望与1455014551进行通信。 apmplanner2可以与18478/python成功通信,但nav不能。 nav只是自言自语。

如何让我的程序获得端口14551并与希望在此端口上进行通信的人进行通信?

0 个答案:

没有答案
相关问题