2014-11-01 4 views
0

두 개의 별도 프로그램 인 클라이언트와 서버를 만들었습니다. 나는 이클립스 내에서 동일한 테스트 (Windows) 머신 (localhost)에서 runnable jar로 테스트를 시도했다. 그것은 꼭해야했던 것처럼 정확하게 작동했습니다.소켓 네트워킹은 로컬 호스트에서만 작동합니다.

그러나 내 동료에게 임상 실험실 (및 이후 서버)을 테스트했을 때 작동하지 않았습니다. 우리는 포트가 열려 있는지 확인했습니다 (고객 측에서도). 그러나 아무 소용이 없습니다. 그것은 작동하지 않았다. 난 그냥 시간 제한 ConnectException을 얻을 것이다.

내가 사용하는 소켓은 50178-50180입니다.

나는 그것을 어떻게 생각해야할지 모른다. 어떤 아이디어가 잘못 될 수 있습니까? 나는 코드의 나머지 부분을 포함하지 않았다

(serverside) 
serverSocket = new ServerSocket(50178); 

while (true) 
{ 
    clientSocket = serverSocket.accept(); 

    streamOut = clientSocket.getOutputStream(); 
    objectOut = new ObjectOutputStream(streamOut); 
    streamIn = clientSocket.getInputStream(); 
    objectIn = new ObjectInputStream(streamIn); 

    (stuff) 
} 

(clientside) 
Socket socket = new Socket(ipAddress, 50178); 

OutputStream streamOut = socket.getOutputStream(); 
DataOutputStream dataOut = new DataOutputStream(streamOut); 
DataInputStream dataIn = new DataInputStream(socket.getInputStream()); 

이후 I/O 물건 (가 로컬 호스트를 통해 작동하기 때문에 실제로 작동 않습니다) :

소켓 코드입니다.

편집 : 요청한 코드를 추가했습니다. 나는 또한 같은 네트워크 (마녀 로컬 IP 192.168.1. *)에있는 두 대의 컴퓨터에서 시도했다. 그것은 효과가 있었다.

+0

서버를 운영 한 사람이 공용 IP 주소를 가지고 있습니까? 고객이 그 주소를 사용 했습니까? – Joni

+0

예, 공용 IP가 사용되었습니다. 그것은 올바른 것이 었습니다. – Karlovsky120

답변

-1

이미 수행 중이지만 serverSocket.accept()에 대한 호출이 완료되어야한다고 생각합니다. 그러면 연결을 기다려야한다는 것을 서버에 알려줍니다.

그런 경우 네트워크 문제 해결을 수행하는 것이 가장 좋습니다. 컴퓨터는 IP 주소 만 사용할 수 있도록 LAN에서 서로를 볼 수 있어야합니다. 연결을 방해하는 방화벽이나 이와 같은 것이 없는지 확인하십시오.

클라이언트가 연결을 시도하는 위치와 서버가 연결을 허용하는 위치의 코드를 추가 할 수 있다면 도움이 될 것입니다.

+1

accept()를 호출하지 않아도 연결 시간 초과가 발생하지 않습니다. – EJP