0

UDP接続を使用して3つのメッセージをコンピューター2に送信するのに問題があります。最後のメッセージはコンピューター2でのみ取得できます。

String service = "deposit";     //send service
byteSend = service.getBytes();
sendPacket.setData(byteSend);
sendPacket.setAddress(destAdd);
sendPacket.setPort(destPort);
otherBranch.send(sendPacket);

byteSend1 = accNo.getBytes();    //send accNo
sendPacket.setData(byteSend1);
sendPacket.setAddress(destAdd);
sendPacket.setPort(destPort);
otherBranch.send(sendPacket);

byteSend2 = depositAmount.getBytes();  //send depositAmount
sendPacket.setData(byteSend2);
sendPacket.setAddress(destAdd);
sendPacket.setPort(destPort);
otherBranch.send(sendPacket);

その後、computer2は次のコードを受け取ります。

myServer.receive(packetReceive);
clientMessage = new String(packetReceive.getData(),0,packetReceive.getLength());
System.out.println("Service: "+clientMessage);

myServer.receive(packetReceive);
accNo = new String(packetReceive.getData(),0,packetReceive.getLength());
System.out.println("accNo: "+accNo);

myServer.receive(packetReceive);
depositAmount = new String(packetReceive.getData(),0,packetReceive.getLength());
System.out.println("depositAmount: "+depositAmount);

どうして出力だけがdepositAmountのみである私の最後の値を取得できるのですか?

4

1 に答える 1

1

コードには送信ペーシングがありません。TCP では、スタックがペーシングを送信します。UDP では、それはあなたの責任です。

ドロップされたデータグラムを検出して再送信するコードを作成する必要があります。UDP はメッセージの配信を保証しません。それがアプリケーションの仕事です。

TCP が行うすべての機能が必要な場合でも、UDP を使用することを選択した場合は、すべてを自分で実装する必要があります。

これも:

  1. 送信ペーシング。

  2. 指数バックオフ。

  3. ドロップされたデータグラムの検出と再送信。

  4. 重複データグラムの検出。

  5. 時間外受付対応。

  6. 破損したデータグラムの検出。

これらすべてを行いたくない場合は、TCP を使用してください。その後、スタックがすべてを行います。

于 2012-12-10T14:46:39.070 に答える