Я не получаю пакет udp с сервера Android Java - PullRequest
0 голосов
/ 21 мая 2019

Я хочу подключиться к серверу, чтобы получить сообщение UDP. Я думаю, что соединение верно, но оно не получит пакет udp для меня с сервера. Сервер отправляет в сеть сообщения udp, но я не могу их получить? Так что он будет подключаться к серверу только почему он не отправляет мне сообщения. Мне не нужно сначала отправлять сообщение на сервер.

 public class TestUdpClient implements Runnable {

    private DatagramSocket sock;
    private int port = 1200;
    private String inetAddress = "122.17.4.6";
    private SocketAddress remoteAddress;
    byte[] message = new byte[200];
    private ByteBuffer b;
    private String signature;



    public void run() {

        try {
            Log.d(TAG, "S: Connecting...");
            InetSocketAddress localSocketAddress = new InetSocketAddress(0);
            remoteAddress = new InetSocketAddress(inetAddress, port);
            sock = new DatagramSocket(localSocketAddress);
            sock.connect(remoteAddress);
           System.out.println(sock.isConnected());
            boolean running = true;
            while (running) {

                // Prepare a UDP-Packet that can contain the data we want to receive
                DatagramPacket packet = new DatagramPacket(message, message.length);
                Log.d(TAG, "S: Receiving...");

                // Receive the UDP-Packet
                sock.receive(packet);
                Log.d(TAG, "S: Received: '" + new String(packet.getData()) + "'");
                synchronized (this) {
                    wait(500);
                }
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (SocketException e) {
            Log.e("connection","No connection was made");
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

MainActivity

View.OnClickListener buttonConnectOnClickListener =
    new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            try {
                udpClient = new UdpClient(serverAdres,poortNummer);
            } catch (IOException e) {
                e.printStackTrace();
            }


            new Thread(new ClientSendAndListen()).start();
            buttonConnect.setEnabled(false);
        }
    };

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Официальная документация по Android

AsyncTask обеспечивает правильное и простое использование потока пользовательского интерфейса.Этот класс позволяет выполнять фоновые операции и публиковать результаты в потоке пользовательского интерфейса без необходимости манипулировать потоками и / или обработчиками.

AsyncTask разработан как вспомогательный класс для Thread и Handler и не представляет собой общий потокфреймворк. В идеале AsyncTasks следует использовать для коротких операций (самое большее несколько секунд).

Вместо этого создайте свой собственный поток и поместите в него всю свою «сетевую» логику / код.

    Thread thread = new Thread(){
        void run(){
           //put all your "network related code here"
        }
    }
    thread.start();

Также для понимания проблемы будет полезен код сервера.

0 голосов
/ 21 мая 2019

Android sdk не разрешает сетевые запросы в основном потоке. Вы должны создать новый поток, чтобы сделать сетевые запросы. Вы можете реализовать AsyncTask, предоставляемый Android SDK для простоты.

https://developer.android.com/training/articles/perf-anr

https://developer.android.com/reference/android/os/AsyncTask

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