Время ожидания подключения истекло при подключении сокета

#android #.net #sockets

Вопрос:

Я пишу код для подключения сокета к серверу. Однако, когда я пытаюсь подключить сокет, он выдает исключение:

net.connectexception: не удалось подключиться: время ожидания

Исключение, по — видимому, возникает в фиксированное время, например, в 1 минуту. Я ссылался на многие материалы и сделал следующее:

  1. добавлено permission.internet к manifest.xml .
  2. сделайте телефон и компьютер под одним и тем же Wi-Fi.

Но исключение все равно возникает.

Вот мой код:

 btnSend = (Button) findViewById(R.id.send);
    btnSend.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mThreadPool.execute(new Runnable() {
                @Override
                public void run() {
                    try {                           
                        outputStream = socket.getOutputStream();
                        outputStream.write(floatToByte(a));
                        outputStream.flush();

                    } catch (IOException e) {
                         Log.d("send",Log.getStackTraceString(e));
                    }
                    catch(NullPointerException e)
                    {
                        Log.d("send",Log.getStackTraceString(e));
                    }

                }
            });

        }
    });
    btnConnect = (Button) findViewById(R.id.connect);
    btnConnect.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            mThreadPool.execute(new Runnable() {
                @Override
                public void run() {

                    try {

                        socket=new Socket("192.168.43.194",9998)
                        System.out.println(socket.isConnected());
                        boolean m=socket.isConnected();
                        if(m) {
                            Log.d("Connect","True");
                        }
                        if(!m){
                            Log.d("Connect","Connect false");
                        }

                    } catch (IOException e) {
                        e.printStackTrace();
                        Log.d("Connect",Log.getStackTraceString(e));
                    }
                    catch(NullPointerException e){
                        Log.d("Connect",Log.getStackTraceString(e));
                    }
                    catch(NetworkOnMainThreadException e){
                        Log.d("Connect",Log.getStackTraceString(e));
                    }

                }
            });
 

Вот мой лог-кот:

 2021-07-07 22:58:56.950 24255-24560/com.example.magickeyboard D/Connect: java.net.ConnectException: failed to connect to /192.168.43.194 (port 9998) from /:: (port 57742): connect failed: ETIMEDOUT (Connection timed out)
    at libcore.io.IoBridge.connect(IoBridge.java:143)
    at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
    at java.net.Socket.connect(Socket.java:621)
    at java.net.Socket.connect(Socket.java:570)
    at java.net.Socket.<init>(Socket.java:450)
    at java.net.Socket.<init>(Socket.java:218)
    at com.example.magickeyboard.Activities.Typing$3$1.run(Typing.java:162)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:929)
 Caused by: android.system.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
    at libcore.io.Linux.connect(Native Method)
    at libcore.io.ForwardingOs.connect(ForwardingOs.java:95)
    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:136)
    at libcore.io.ForwardingOs.connect(ForwardingOs.java:95)
    at libcore.io.IoBridge.connectErrno(IoBridge.java:157)
 

Это код моего сервера, и я привязал сокет, прослушивающий порт.

 public class ser {
    public static void main(String[] args) {       
        ServerSocket serverSocket = null;
        try {           
            serverSocket = new ServerSocket(9998);            
            Socket socket = serverSocket.accept();           
            InputStream inputStream = socket.getInputStream();
            byte buffer[] = new byte[1024 * 4];
            int temp = 0;            
            while ((temp = inputStream.read(buffer)) != -1) {
                System.out.println(new String(buffer, 0, temp));
            }
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 

Это IP — адрес компьютера:

изображение

Комментарии:

1. Что ж, давайте начнем с очевидного: вы уверены, что 192.168.43.194 является правильным IP-адресом, назначенным ПК, и есть ли у ПК привязанный TCP-сервер, который прослушивает 192.168.43.194 на порту 1998? Вы написали код сервера? Если да, можете ли вы это показать?

2. Я добавил код сервера и IP-адрес компьютера в свой ответ. Можете ли вы помочь мне выяснить, где ошибка? @Реми Лебо

3. Ваш код не соответствует ошибке. В сообщении об ошибке говорится, что тайм-аут произошел при подключении к порту 9998, но код показывает, что порт 1998 используется с обеих сторон. Так откуда же берется 9998?

4. Я использовал порт 9998, затем возникла проблема. Итак, я изменил его на 1998 год, и снова возникает та же проблема. Извините за публикацию кода, который не соответствует logcat. Я отредактировал свой код. И теперь он соответствовал логкату. Но я все еще не знаю, в чем проблема. Спасибо, что помогли мне! @ Реми Лебо