简体   繁体   English

无法在Android上接收UDP数据包?

[英]Can't receive UDP packet on android?

I tried to implement UDP server on Android, i can send packets to server, but can't received it. 我尝试在Android上实现UDP服务器,但可以将数据包发送到服务器,但无法接收。 Also i tried run receiver without android, it works. 我也试过没有Android的运行接收器,它的工作原理。 Where is the problem? 问题出在哪儿?

Local sender for Testing: 本地发件人进行测试:

int send_packet(uint8_t* data) {
    int retcode;
    int socket_out;
    int broadcast = 1;
    struct sockaddr_in addr;

    socket_out = socket(AF_INET, SOCK_DGRAM, 0);
    if ( socket_out < 0 )
        return -1;

    setsockopt(socket_out, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof broadcast);

    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
    addr.sin_port=htons(PORT_NUMBER);

    retcode = sendto(socket_out, data, sizeof(packet_data_t), 0,
        (struct sockaddr *) &addr, sizeof(addr));
    perror("sendto");

    close(socket_out);

    return 0;
}

Android receiver: Android接收器:

public void run(){
   try {
       byte[] buffer = new byte[BUFFER_SIZE];
       DatagramSocket socket = new DatagramSocket(getPort());
       //socket.setBroadcast(true);
       while(true){
           DatagramPacket packet = new DatagramPacket(buffer, buffer.length );
           socket.receive(packet);
           (new CallbackWrapper(getPacketReciever())).run();
       }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

ps I am running my application on a HTC Legend, not on emulator ps我在HTC Legend而不是模拟器上运行我的应用程序

The main problem is on this line: 主要问题是在这条线上:

DatagramSocket socket = new DatagramSocket(getPort());

You are assuming that the local host of the device is the same as the machine/computer, but the device has got its own network card, consequently having his own IP in any network, and his own network address IP, which is his own. 您假设设备的本地主机与机器/计算机相同,但是设备拥有自己的网卡,因此在任何网络中都具有自己的IP,以及自己的网络地址IP。 The device is not reachable through just a port of your machine. 仅通过机器的端口无法访问该设备。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM