【发布时间】:2012-03-07 00:04:49
【问题描述】:
我正在制作一个 TFTP 应用程序。根据 RFC 协议,所有数据必须以最大 512 字节的块发送。所以每个数据包可以是
我将每个文件读入一个字节[]输出数据=新字节[512];数组,我将它发送给客户端,但是当它得到一个总大小小于 512 字节的文件(如 ascii 文件或 .ini、.css、.html 等)时,似乎出现了问题。
奇怪的是,对于 UDP 协议,每次高达 3mb 的传输都过去了,没有大的损失。似乎发生的唯一损失是读取文件的最后一块小于 512 字节时。
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);
Thread.sleep(5);
}
}
既然这是关于读取文件的问题,我该如何修复文件末尾的丢失以及它不读取小于 512 的文件的问题
客户:
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);
if(receiveData.getLength() == 512)
{
fos.write(incomingData);xx
} else {
fos.write(incomingData);
fos.close();
break;
}
}
clientSocket.close();
}
【问题讨论】:
-
这里没有问题。你想知道什么?
标签: java sockets networking udp