Я делаю заявку TFTP. В соответствии с протоколами RFC все данные должны передаваться кусками по 512 байт в максимальном размере. Таким образом, каждый пакет может быть <= 512 байт. </p>
Я читаю каждый файл в байте [] outgoingData = new byte [512]; массив, и я отправляю его клиенту, однако, кажется, что что-то идет не так, когда получается файл, размер которого меньше 512 байт, например файл ascii или .ini, .css, .html и т. д.
Как ни странно, для протокола UDP каждая передача до 3 МБ прошла без больших потерь. Единственная потеря, которая, по-видимому, происходит, - это когда последний фрагмент файла считывается менее 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();
}