2014-05-16 2 views
0

TCP 구멍 펀치 메커니즘을 사용하여 클라이언트와 서버가 다른 NAT/방화벽 뒤에있는 RMI 클라이언트 서버 연결을 설정하려고합니다. 현재 Public Ip와 포트 "80"을 사용하여 클라이언트와 서버 사이의 연결을 얻을 수 있습니다. TCP 연결이 설정되면 RMIServer의 스텁 정보를 검색 할 수 있습니다. 또한, 나는 netstat 수 있고 연결을 설립 볼 수 있습니다.RMI 클라이언트 - 서버 : JRMP 연결 설정 중 오류가 발생했습니다.

원격 객체를 읽으려고 할 때하지만 NETSTAT와 연결을 모니터링에 다음과 같은 예외

java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
java.net.SocketTimeoutException: Read timed out 
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:293) 
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:190) 

받고 있어요, 나는 TCP 연결이 즉시 종료하고 안정되지됩니다 볼 수 있었다. 안정적인 TCP 연결을 유지하거나 얻는 방법에 대한 힌트를 얻을 수 있다면 도움이 될 것입니다.

감사합니다.

+0

'원격 객체 읽기 시도'를 정의하십시오. 나머지 스택 추적을 제공하십시오. – EJP

답변

-1

시간 초과 오류는 클라이언트와 서버간에 소켓을 열 수 있었지만 소켓이 적시에 서비스되지 않아 닫히고 예외가 발생했음을 나타냅니다.

클라이언트가 경로에서 올바른 클래스 라이브러리를 찾을 수 없기 때문에 이것이 마지막으로 발생했습니다. 서버가 소켓을 열려고 시도하였으나 클라이언트가 클래스 라이브러리를 찾지 못해 소켓을 찾지 못했습니다. 결국 소켓 시간이 초과되었습니다.

클라이언트와 서버의 클래스 경로를 다시 확인하십시오.

+0

여기에는 클라이언트와 서버가 있습니다. 클라이언트는 연결을 엽니 다. 서버가 연결을 허용합니다. 클라이언트가 읽기 시간 초과를 받았으므로 응답하지 않는 서버입니다. – EJP

+0

나는 서버가 클라이언트에 보내려고 시도하고 소켓 오류가 발생하는 다른 esy를 보았다. 서버는 클라이언트 요청을 위해 소켓에서 청취 한 다음 일반적으로 전용 소켓에서 클라이언트를 처리하는 전용 스레드를 생성하지만 잘 알려진 포트는 더 많은 클라이언트 req를 허용하도록 해제됩니다. 첫 번째 단계는 클래스 경로를 확인하는 것입니다. – bpendell

+0

포트 "80"을 사용하여 TCP 연결을 설정하는 것이 좋습니까? 내 클라이언트 컴퓨터는 서버와의 연결을 설정 한 직후 "연결 시간 초과"를 가져옵니다. TCP 연결을 유지할 수있는 방법이 있습니까? socket.setKeepAlive (true)를 사용하여 시도했지만 도움이되지 않는 것 같습니다. – skmr