0

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

クライアントはまだサーバーをリッスンしています。サーバーが停止します。

後で、サーバーはデータベース情報を再利用してクライアントに到達したいと考えています。クライアントはまだサーバーの同じポートをリッスンしているため、クライアントは通信を受信する必要があると思います。

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

Stackoverflowのメンバーが提案した方法を試したので、質問を言い換えましょう。

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

4

2 に答える 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();
于 2009-05-14T08:15:23.950 に答える
0

UDP プロトコル ( RFC 768 )に関して少し混乱していると思います。UDP と TCP の違いを理解するには、UDP プロトコルを確認することが役立つと思います。

特定の問題に関しては、コードがなければ正確な問題を知ることは困難です。Sun のチュートリアルで利用可能なUDPのクライアント サーバーの例があります。

于 2009-05-14T07:55:55.870 に答える