我有点难过,可能是因为我不知道如何正确搜索(我尝试了许多不同的关键字)。无论如何,我正在尝试 TCP 打孔的变体(使用集合服务器)。我已经创建了一个到服务器的 TCP 套接字并关闭它而不抛出任何异常。但是当我尝试在原始套接字的本地端口上创建一个 ServerSocket 时,它会因 IOException 而失败。
private static int LOCALPORT = 0;
private static String TARGETIP = "88.888.88.888";
private static int TARGETPORT = 8888;
try{
InetAddress serverAddr = InetAddress.getByName(TARGETIP);
socket = new Socket(serverAddr, TARGETPORT);
LOCALPORT = socket.getLocalPort();
socket.close();
ServerSocket sSocket = new ServerSocket(LOCALPORT);
Socket skt = sSocket.accept();
}
catch (IOException e){
}
我只是无法理解为什么我不能关闭套接字并在同一端口上打开服务器套接字。
更新:来自 logcat
java.net.BindException: bind failed: EADDRINUSE (Address already in use)
Caused by: libcore.io.ErrnoException: bind failed: EADDRINUSE (Address already in use)