【发布时间】:2012-03-24 07:08:43
【问题描述】:
似乎我编写的客户端 - 服务器应用程序确实有效,但似乎并非每次都处理所有数据。
我正在 Eclipse 环境中的本地机器上对其进行测试。
服务器:
private void sendData() throws Exception
{
DatagramPacket data = new DatagramPacket(outgoingData, outgoingData.length, clientAddress, clientPort);
InputStream fis = new FileInputStream(responseData);
int a;
while((a = fis.read(outgoingData,0,512)) != -1)
{
serverSocket.send(data);
}
}
客户:
private void receiveData() throws Exception
{
DatagramPacket receiveData = new DatagramPacket(incomingData, incomingData.length);
OutputStream fos = new FileOutputStream(new File("1"+data));
while(true)
{
clientSocket.receive(receiveData);
fos.write(incomingData);
}
}
我曾经在 while(true) 循环中使用 if else 来检查数据包长度是否小于 512 字节,以便知道何时中断;
我在想有一个问题,但现在似乎没关系,我只需等待几分钟,然后停止 Client.java 应用程序
文件确实传输了,但原始文件是 852kb,到目前为止我得到了 777、800、850,.. 但从来没有全部。
【问题讨论】:
-
你试过刷新流吗?
-
UDP 不可靠。 UDP 规范规定 UDP 将尽最大努力将数据包从源发送到接收器,但数据包可能会被丢弃,并且永远不会通知接收/发送者。如果您需要可靠地发送数据,您将需要实现某种丢包检测方案或改用 TCP。从本地意义上讲,您丢失了这么多数据包,这有点奇怪,但是没有合同规定本地 UDP 连接必须可靠。
-
我明白这一点,但我仍然想弄清楚如何才能尽可能多地帮助他们。
-
必须检查 UDP 是如何工作的。然后,修改您的工作以处理丢失数据包的消息
标签: java sockets networking inputstream