2009-05-14 5 views
0

연결되었을 때 IP 및 클라이언트 포트를 수집하는 간단한 UDP Java 서버를 실행하고 Database에 정보를 저장합니다.UDP 클라이언트가 Java로 연결할 수 없습니다.

클라이언트가 여전히 서버를 청취 중입니다. 서버가 중지됩니다.

나중에 서버가 데이터베이스 정보를 다시 사용하여 클라이언트에 연결하려고합니다. 클라이언트가 여전히 동일한 서버 포트를 청취 중이므로 클라이언트가 통신을 수신해야합니다.

나는 UDP가 처음이므로 위의 목표를 달성하는 방법을 알려 주시기 바랍니다. 고맙습니다.

Stackoverflow 멤버가 제안한 방법을 시도 했으므로이 질문에 대한 답을 다시 말해 보겠습니다.

짧은 시간 내에 서버로 클라이언트에 연결할 수 있지만 10 분 후에 클라이언트에 연결할 수 없습니다. 클라이언트는 항상 서버를 청취 할 준비가되어 있지만 서버는 여러 번 시도해도 클라이언트에 도달 할 수 없습니다. 이 원인은 무엇일까요? 이 문제를 해결할 방법을 알려주십시오.

+0

클라이언트와 서버 사이에 방화벽이 : 그것은 그런 식으로 뭔가를 갈 것

? – Duck

답변

0

UDP 프로토콜 (RFC 768)과 관련하여 다소 혼란 스럽습니다. UDP와 TCP의 차이점을 이해하려면 UDP 프로토콜을 검토하는 것이 도움이 될 것이라고 생각합니다.

특정 문제에 대해서는 어떤 유형의 코드 없이도 정확한 문제를 파악하기 어렵습니다. 태양 튜토리얼에는 Client-Server in UDP example이 있습니다.

+0

짧은 시간 내에 클라이언트가 서버에 접속할 수 있지만 10 분 후에 클라이언트에 도달 할 수 없습니다. 클라이언트는 항상 서버를 청취 할 준비가되어 있지만 서버는 여러 번 시도해도 클라이언트에 도달 할 수 없습니다. 이 원인은 무엇일까요? 이 문제를 해결할 방법을 알려주십시오. –

+0

특정 코드가 없으면 문제가 될 수 있음을 지적하기가 어렵습니다. 클라이언트가 사용하는 소켓이 첫 번째 데이터 그램을 보내는 데 사용하는 소켓과 동일한 지 확인하는 것이 좋습니다. 두 개의 소켓을 만들고 서버가 클라이언트가 더 이상 수신 대기하지 않는 포트로 데이터 그램을 보내고있을 수 있습니다. –

0

UDP는 세션이 없으므로 실제로 작동해야합니다.

// Client: 

socket = new DatagramSocket(); 
DatagramPacket req = new DatagramPacket(data, data.length, serverAddress, serverPort); 
socket.send(req); 
DatagramPacket resp = new DatagramPacket(new byte[MAX_RESP_SIZE], MAX_RESP_SIZE); 
socket.receive(resp); 

// Server: 

DatagramSocket socket = new DatagramSocket(port); 
while (!stopped) { 
    DatagramPacket req = new DatagramPacket(new byte[MAX_REQ_SIZE], MAX_REQ_SIZE); 
    socket.receive(req); 
    saveToDatabase(req.getAddress(), req.getPort()); 
} 
socket.close(); 

// Then later: 

DatagramSocket socket = new DatagramSocket(port); 

// retrieve clientAddr and clientPort from database 
DatagramPacket resp = new DatagramPacket(data, data.length, clientAddress, clientPort); 
socket.send(resp); 
socket.close(); 
+0

유일한 차이점은 나중에 서버에서 클라이언트로 통신하기 위해 다음과 같이 데이터 그램 패킷을 생성한다는 것입니다. DatagramPacket resp = new DatagramPacket (data, data.length); resp.setSocketAddress (새 InetSocketAddress (clientIp, clientPort)); 이 문제가 발생합니까? –

+0

나는 그렇게 생각하지 않는다. –

+0

짧은 시간 내에 클라이언트가 서버에 접속할 수 있지만, 10 분 후에는 클라이언트에 도달 할 수 없다. 클라이언트는 항상 서버를 청취 할 준비가되어 있지만 서버는 여러 번 시도해도 클라이언트에 도달 할 수 없습니다. 이 원인은 무엇일까요? 이 문제를 해결할 방법을 알려주십시오. –

관련 문제