2013-04-19 5 views
1

java 소켓을 사용하여 클라이언트와 서버를 작성했습니다. 두 시스템이 동일한 네트워크에 있습니다. 로컬 IP 주소를 사용하여 연결할 때 문제가 없습니다. 그러나 공용 IP 주소를 사용하면 연결 시간이 초과되고 클라이언트가 "SocketException : connection reset"을 throw하고 서버가 "SocketException : 연결을 피어로 재설정 : 소켓 쓰기 오류"를 throw합니다. 이것은 대부분의 경우 발생하지만 한 번 푸른 달에 연결되면 실제로 성공합니다. 클라이언트 컴퓨터에서 서버의 로컬 주소와 라우터에 성공적으로 ping을 수행 할 수 있습니다.인터넷을 통한 Java 소켓

라우터에 들어가서 서버 컴퓨터에 영구 IP 주소를 할당하고 관련 포트의 모든 트래픽을 해당 IP 주소로 전달했습니다. 불행히도 그것이 문제를 해결할 수 있다고 생각하는 유일한 방법 이었지만 그렇지 않았습니다. 나는 또한 서버에서 Windows 방화벽을 해제했지만 여전히 운이 없다.

클라이언트 : (whatismyip.com에서 가져온 IP)

Socket s = new Socket("xx.xxx.xxx.xx", 27499); 

연결합니다.

서버 : 어떤 도움을 주시면 감사하겠습니다

InetAddress ip = InetAddress.getLocalHost(); 
ServerSocket ss = new ServerSocket(27499, 0, ip); 
Socket cs = ss.accept(); 

. 필요한 경우 더 많은 코드를 제공 할 수 있습니다.

+0

방화벽 문제 일 수 있으며 포트 전달 문제 일 수 있습니다. – MadProgrammer

+0

@MadProgrammer 서버에서 예외가 발생하기 때문에 방화벽 문제가 아닌 것으로 간주 할 수 있습니까? 적어도 몇 가지 통신이 일어나고 있다는 것을 암시 하시겠습니까? – 0nyx

+0

테스트를 위해 방화벽을 비활성화하고 어떤 일이 일어나는지를 먼저 보았습니다. 하지만 연결이 서버로 올바르게 전달되었는지 확인하기 위해 외부 세계에 대한 서버 연결의 포트 전달 설정을 확인합니다. 또한 로컬 컴퓨터를 통해 서버에 1- 연결하려고 시도하고 동일한 컴퓨터에서 서버에 연결하려고합니다. 문제가 없다면 방화벽이 될 가능성은 거의 없지만 방화벽이 차단되어 있으면 계속 될 수 있습니다. 외부 IP 범위 – MadProgrammer

답변

0

는 "SocketException이 : 피어에 의해 연결 재설정 : 소켓 쓰기 오류"

이 서버가 실제로 연결을 거부하는 의미는, 방화벽 문제가 될 수 연결을 거부 서버는 서버가 실제로 다운되는 또는 과부하.

+0

이것은 Windows 방화벽도 비활성화 할 때 발생합니다. 이 서버가 유일한 연결이기 때문에 서버가 과부하 상태인지 확인할 수 있습니다. 실제로 예외를 던진 라인은'oos = new ObjectOutputStream (clientsocket.getOutputStream()); '입니다. – 0nyx

+0

클라이언트와 서버의 스택 트레이스를 알려진 위치에 출력합니다. 이렇게하면 서버가 클라이언트의 연결 시도를 거부하는 이유에 대한 단서를 얻을 수 있습니다. –