내가 주소 Resusability을 확인하려면 다음의 코드를 사용하고 새로운 자바 런타임 환경에서 작동하지 않습니다 : -주소 재사용이
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class CheckBind {
public static void main(String[] args) {
Thread serverThread = new Thread(new Runnable() {
@Override
public void run() {
try
{
ServerSocket server = new ServerSocket();
server.setReuseAddress(true);
server.bind(new InetSocketAddress("127.0.0.1", 2000));
System.out.println("Server Listen: "+server.getLocalSocketAddress());
while(true)
{
Socket client = server.accept();
System.out.println(""+client.getRemoteSocketAddress());
System.out.println(""+client.getLocalSocketAddress());
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
});
serverThread.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(true)
{
Socket client = new Socket();
try
{
client.setReuseAddress(true);
client.bind(new InetSocketAddress("127.0.0.1", 2000));
client.connect(new InetSocketAddress("127.0.0.1",4000));
System.out.println("Client Connect: "+client.getRemoteSocketAddress());
break;
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
이것은 Windows 7에서 잘 작동, 64 비트 그리고 JRE 7U5를 사용 [1.7 업데이트 5] 32 비트 버전.
를 [A 서버가 이미 127.0.0.1:4000에서 실행되는 고려]하지만 나는 그것이 JVM_Bind 예외를 제공 JRE 7U60 32 비트 및 JRE 7U72 64 비트에서 확인할 같은 JRE의 새 버전과 동일 할 때. 기본적으로 setReuseAddress (true) OPTION을 사용하는 전체 목적을 무효화합니다.
이 문제를 해결하는 방법에 대한 도움을주십시오.
덕분에 &는 안부
이 기능을 구현하는 방법을 제안 할 수 있습니까? 나는 P2P 채팅 응용 프로그램을 만들고 NAT 변환을 수행하여 다른 NAT 뒤에있는 2 명의 사용자간에 직접 TCP 연결을 만들고 싶습니다. –
나는 그것이 가능하다고 생각하지 않는다. –