新的Socket挂起了应用程序

时间:2019-02-20 18:21:32

标签: java sockets

当我尝试创建新的JFrame时,我的Socket挂断了(冻结)。完全相同的代码(不是相同的.java文件,而是相同的代码行)在我旁边的计算机上工作。

知道为什么代码冻结吗?

尝试#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 )。如你看到的, ”。”永远不会打印。

  

192. xxx xxx .53 1494

也不能执行此操作(帧“冻结”和相同的输出)。

尝试#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 :(得分:3)

您正在Swing事件调度线程中运行该代码。这是执行诸如在侦听器中处理事件之类的事情并执行绘画的线程。

由于Socket试图连接而挂起,在此期间,由于线程忙(试图连接),因此无法进行任何事件处理或绘制。

套接字连接(和读/写)需要在其自己的线程中进行,以免阻塞EDT。

答案 1 :(得分:2)

您可能想要指定最大持续时间,例如防火墙之类的东西可能会阻止套接字连接。看看https://docs.oracle.com/javase/8/docs/api/java/net/Socket.html#connect-java.net.SocketAddress-int-

也正如@user11091841所述,在另一个线程中运行