当我尝试创建新的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
答案 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
所述,在另一个线程中运行