новый сокет вешает приложение - PullRequest
0 голосов
/ 20 февраля 2019

Мой JFrame просто зависает (зависает), когда я пытаюсь создать новый Socket.Тот же самый код (не тот же файл .java, но те же строки кода) работает на компьютере рядом со мной.

Есть идеи, почему код зависает?

try # 1

private Socket socket;
public void connect( String ip, int port ) {    
    try {
        System.out.println( ip + " " + port );  //just to show the arguments doesn't seem to be the issue.
        socket = new Socket(ip,port);
        System.out.println(".");    

    } catch (IOException e) {System.out.println(e);}    
}

Вывод на консоль (xxx = digets ).Как вы видете, "."не печатается'и тот же вывод).

try # 2

public void connect( String ip, int port ) {
    try {
        System.out.println( ip + " " + port );
        socket.connect(new InetSocketAddress(ip,port), 5000);
        System.out.println(".");

    } catch (IOException e) {System.out.println(e);}    
}

192. xxx . xxx .53 1494

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Возможно, вы хотите указать максимальную продолжительность, что-то вроде брандмауэра может заблокировать подключение вашего сокета.взгляните на https://docs.oracle.com/javase/8/docs/api/java/net/Socket.html#connect-java.net.SocketAddress-int-

и, как уже упоминалось @user11091841, запустите его в другом потоке

0 голосов
/ 20 февраля 2019

Этот код запускается в потоке рассылки событий Swing.Это поток, который выполняет такие вещи, как обработка событий в слушателях, и выполняет рисование.

Он зависает, потому что Socket пытается подключиться, и в течение этого времени не может быть никакой обработки событий или рисования, поскольку поток занят(пытается подключиться).

Соединение через сокет (и чтение / запись) должно происходить в своем собственном потоке, чтобы не блокировать EDT.

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