TcpSockets не подключаются

1

Я пытаюсь установить TCP-соединение между ноутбуком как клиентом и ПК в качестве сервера. Моя цель - использовать сервер для отправки сообщений между двумя устройствами Android. Сервер имеет общедоступный IP-адрес. Чтобы проверить соединение, я написал два простых класса Java:

import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {    
    public ServerSocket welcome;
    public Socket soc;
    public int listeningPort = /* default port */;

    public TcpServer() {
    }

    public static void main(String[] args) {
        TcpServer ms = new TcpServer();
        if(args.length > 0) {
            ms.listeningPort = Integer.parseInt(args[0]);
        }
        ms.listen();
    }

    public void listen() {
        try {
            welcome = new ServerSocket(listeningPort);
            System.out.println(">>> listening on port " + listeningPort + " <<<");

            soc = welcome.accept();
            System.out.println(">>> got a new connection from "
                    + soc.getInetAddress().toString() + " <<<");

            while (true) {
                try {
                    byte b[] = new byte[1024];
                    soc.getInputStream().read(b, 0, 1);
                    System.out.print((char) (b[0]));
                } catch (Exception e) {
                    System.err.println(e);
                }
            }

        } catch (Exception e) {
            System.err.println(e);
        }       
    }
}

import java.net.Socket;

public class TcpSendClient {    
    private String serverIp = /* some ip */;
    public int port = /* default port */;
    private SendThread st;

    public TcpSendClient() {
    }

    public static void main(String[] args) {
        TcpSendClient client = new TcpSendClient();
        if(args.length > 0) {
            client.port = Integer.parseInt(args[0]);
        }
        client.send();
    }

    public void send() {
        System.out.println("Try to connet to " + serverIp + " via Port" + port);
        st = new SendThread(serverIp, port);
        st.start();
    }

    class SendThread extends Thread {
        private Socket soc;

        public SendThread(String theIp, int thePort) {
            try {
                soc = new Socket(theIp, thePort);
            } catch (Exception e) {
                System.err.println(e);          
            }
        }

        public void run() {
            try {
                while (true) {
                    String toSend = "Hello ";
                    soc.getOutputStream().write(toSend.getBytes());
                    Thread.sleep(800);
                    System.out.println("sent");
                }
            } catch (Exception e) {
                System.err.println(e);          
            } 
        }
    }
}

Когда я запускаю оба файла Java на сервере pc, соединение работает нормально. Он также работал, если я настроил локальный Wi-Fi с одним ноутбуком и подключился к нему с помощью другого ноутбука. Но когда я запускаю клиентский файл с ноутбука, подключенного к Интернету, я не могу получить соединение. В брандмауэре на сервере я открыл несколько портов для подключения, а ноутбук, который я использую в качестве клиента, отключен брандмауэром. Помимо брандмауэра, я действительно не знаю, что посмотреть, чтобы запустить соединение. Любые идеи относительно причины моей проблемы и решения?

  • 0
    Есть ли сервер за NAT? Вы перенаправили нужные порты?
  • 0
    Я не думаю, что это за NAT. Если перейти на whatismyip.com, я получу тот же адрес, что и при вводе ipconfig в командном окне. Или мне нужно еще что-нибудь проверить?
Теги:
sockets
network-programming
network-protocols

1 ответ

0
Лучший ответ

Я нашел решение: брандмауэр Windows по-прежнему блокировал порты для Java. Мне потребовалось немного времени, чтобы понять это, потому что я не был зарегистрирован как администратор на этом компьютере и не мог видеть правила.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню