我有问题我使用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?
答案 0 :(得分:1)
您的代码没有传输调步。使用TCP,堆栈确实为您传输调步。使用UDP,这是你的责任。
您需要编写代码来检测已删除的数据报并重新传输它们。 UDP不保证消息传递。这是应用程序的工作。
如果您需要TCP所做的一切,但是您选择使用UDP,则必须自己实现所有这些。
这包括:
传输投放安排。
指数退避。
丢弃数据报检测和重传。
重复数据报检测。
无序接收处理。
损坏的数据报检测。
如果您不想做所有这些事情,请使用TCP。然后堆栈为你完成所有工作。