2009-05-14 7 views
0

Ich benutze einen einfachen UDP-Java-Server, der IP und Port des Clients sammelt, wenn er verbunden ist, Informationen in der Datenbank speichern.UDP-Client in Java nicht erreichbar

Der Client hört immer noch auf den Server. Der Server stoppt.

Später möchten Server die Datenbankinformationen wiederverwenden, um den Client zu erreichen; und da der Client immer noch denselben Port des Servers hört, sollte der Client die Kommunikation erhalten.

Ich bin neu bei UDP, lassen Sie mich bitte den Weg, um das oben genannte Ziel zu erreichen. Vielen Dank.

Lassen Sie mich die Frage neu formulieren, wie ich die von Mitgliedern von Stackoverflow vorgeschlagenen Wege versuchte.

Der Client kann innerhalb kurzer Zeit vom Server kontaktiert werden, aber nach etwa 10 Minuten ist der Client nicht erreichbar; obwohl es scheint, Client ist bereit, Server für die ganze Zeit zu hören, aber der Server kann Client nicht erreichen, auch wenn es für mehrere Zeit versucht. Was könnte dafür Ursache sein? Bitte lassen Sie mich wissen, wie Sie damit umgehen können

+0

Gibt es eine Firewall zwischen dem Client und dem Server? – Duck

Antwort

0

Ich denke, Sie sind ein bisschen verwirrt in Bezug auf das UDP-Protokoll (RFC 768). Ich denke, es wäre hilfreich, das UDP-Protokoll zu überprüfen, um die Unterschiede zwischen UDP und TCP zu verstehen.

In Bezug auf Ihr spezifisches Problem ist es schwierig zu wissen, was genau Ihr Problem ist, ohne irgendeine Art von Code. In den Sun Tutorials steht ein Client-Server in UDP example zur Verfügung.

+0

Der Client kann innerhalb kurzer Zeit vom Server kontaktiert werden, aber nach etwa 10 Minuten ist der Client nicht erreichbar; obwohl es scheint, Client ist bereit, Server für die ganze Zeit zu hören, aber der Server kann Client nicht erreichen, auch wenn es für mehrere Zeit versucht. Was könnte dafür Ursache sein? Bitte lassen Sie mich wissen, wie Sie damit umgehen können –

+0

Ohne den spezifischen Code ist es schwierig, darauf hinzuweisen, welches das Problem sein könnte. Ich schlage vor, dass Sie überprüfen, dass der Socket, den der Client verwendet, derselbe ist, den Sie zum Senden des ersten Datagramms verwenden. Möglicherweise erstellen Sie zwei Sockets, und der Server sendet Datagramme an einen Port, den der Client nicht mehr überwacht. –

0

UDP ist Sessionless, also denke ich sollte es in der Tat funktionieren.

Es wäre so etwas wie das gehen:

// 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

Der einzige Unterschied ist, dass ich Datagram-Paket wie folgt für die Kommunikation von Server zu Client erstellen: DatagramPacket resp = neue DatagramPacket (data, data.length); resp.setSocketAddress (neue InetSocketAddress (clientIp, clientPort)); sollte das wichtig sein? –

+0

Ich denke nicht –

+0

Der Client kann von Server innerhalb einer kurzen Zeitspanne kontaktiert werden, aber nach etwa 10 Minuten ist der Client nicht erreichbar; obwohl es scheint, Client ist bereit, Server für die ganze Zeit zu hören, aber der Server kann Client nicht erreichen, auch wenn es für mehrere Zeit versucht. Was könnte dafür Ursache sein? Bitte lassen Sie mich wissen, wie Sie damit umgehen können –