2009-05-14 5 views
0

接続時にIPとクライアントのポートを収集する単純なUDP Javaサーバーを実行していて、データベースに情報を格納しています。UDPクライアントがJavaでアクセスできない

クライアントは引き続きサーバーを待機しています。サーバーは停止します。

その後、サーバーはデータベース情報を再利用してクライアントに到達します。クライアントは引き続き同じポートのサーバーを聴いているので、クライアントはその通信を受信する必要があります。

私はUDPに新しいです、上記の目的を達成する方法を教えてください。ありがとうございました。

私はStackoverflowのメンバーによって提案された方法を試してみたように質問を言い換えることができます。

クライアントは短い時間内にサーバーに接続できますが、たとえば10分後にクライアントに到達できません。クライアントは常にサーバーを聴く準備ができているように見えますが、サーバーは何度も試してもクライアントに到達できません。これは何が原因でしょうか?私にこのことに対処する方法を教えてください

+0

クライアントとサーバの間にファイアウォールがある:それはそのような何かを行くだろう

? – Duck

答えて

0

あなたはUDPプロトコル(RFC 768)に関してちょっと混乱していると思います。私は、UDPとTCPの違いを理解するためにUDPプロトコルを見直すと便利だと思います。

特定の問題に関しては、どのような種類のコードもなく正確な問題が何であるかを知ることは困難です。太陽のチュートリアルにはClient-Server in UDP exampleがあります。

+0

クライアントは短い時間内にサーバーに接続できますが、たとえば10分後にクライアントに到達できません。クライアントは常にサーバーを聴く準備ができているように見えますが、サーバーは何度も試してもクライアントに到達できません。これは何が原因でしょうか?私にはこれに対処する方法を教えてください –

+0

特定のコードがなければ、それは問題である可能性があることを指摘するのは難しいです。クライアントが使用しているソケットが最初のデータグラムを送信するのと同じものであることを確認することをお勧めします。 2つのソケットを作成している可能性があり、サーバーはクライアントがもう受信していないポートにデータグラムを送信しています。 –

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分後にクライアントに到達できません。クライアントは常にサーバーを聴く準備ができているように見えますが、サーバーは何度も試してもクライアントに到達できません。これは何が原因でしょうか?私にこのことに対処する方法を教えてください –

関連する問題