UDP消息传递无法在计算机2中获得成功

时间:2012-12-10 14:44:41

标签: java udp

我有问题我使用UDP连接向计算机2发送3条消息,它只能在计算机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);

之后,计算机2有这个代码接收:

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?

1 个答案:

答案 0 :(得分:1)

您的代码没有传输调步。使用TCP,堆栈确实为您传输调步。使用UDP,这是你的责任。

您需要编写代码来检测已删除的数据报并重新传输它们。 UDP不保证消息传递。这是应用程序的工作。

如果您需要TCP所做的一切,但是您选择使用UDP,则必须自己实现所有这些。

这包括:

  1. 传输投放安排。

  2. 指数退避。

  3. 丢弃数据报检测和重传。

  4. 重复数据报检测。

  5. 无序接收处理。

  6. 损坏的数据报检测。

  7. 如果您不想做所有这些事情,请使用TCP。然后堆栈为你完成所有工作。