似乎我编写的Client-Server应用程序确实有效,但似乎并非每次都处理所有数据。
我正在Eclipse env。
的本地机器上测试它服务器:
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字节,因此它知道何时中断;
我当时觉得有一个问题,但是现在好像是oke我等了几分钟然后停止了Client.java应用程序
文件传输但是原始文件是852kb,到目前为止我有777,800,850,...但是从来没有全部。
答案 0 :(得分:1)
您的方法的根本问题是UDP不保证传递。如果 使用UDP(而不是TCP),则必须实现一种方案,该方案将检测并处理丢失,无序到达或多次传送的数据包。
答案 1 :(得分:0)
您应该使用TCP来传输文件。您可能正在丢失数据包,因为您在循环时发送速度非常快。
int a;
while((a = fis.read(outgoingData,0,512)) != -1)
{
serverSocket.send(data);
}
由于你的发送速度如此之快,我非常怀疑它是否有机会以正确的顺序接收。一些数据包也可能因此丢失。
此外,由于您发送的固定大小为512字节,因此您发送的最后一个数据包可能不是那么大,因此您会看到文件的结尾“看起来很奇怪。”