Не можете получить пакет UDP на Android? - PullRequest
1 голос
/ 18 марта 2011

Я пытался внедрить сервер UDP на Android, я могу отправлять пакеты на сервер, но не могу его получить. Также я попытался запустить приемник без Android, он работает. Где проблема?

Локальный отправитель для тестирования:

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:

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 Я запускаю свое приложение на HTC Legend, а не на эмуляторе

1 Ответ

1 голос
/ 18 марта 2011

Основная проблема в этой строке:

DatagramSocket socket = new DatagramSocket(getPort());

Вы предполагаете, что локальный хост устройства такой же, как машина / компьютер, но устройство имеет свою собственную сетевую карту, следовательно, имеет свой собственный IP в любой сети и свой собственный IP-адрес сети, который является его собственный. Устройство недоступно только через порт вашей машины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...