Казалось бы, что приложение Client-Server, которое я написал, работает, однако кажется, что не все данные обрабатываются каждый раз.Java - UDP отправка данные через гнездо .. нет rec. все данные
Я тестирую его на локальной машине в 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);
}
}
Я использовал, чтобы иметь, если еще в то время (правда) цикл, чтобы проверить, если длина пакета составляет менее 512 байт, так что знал, когда ломать;
Я думал, там была проблема йота это, но кажется, что было Оке сейчас я просто подождать несколько минут, а затем остановить приложение Client.java
Файл делает передачу, но исходный файл 852kb и до сих пор Я получил 777, 800, 850, .. но никогда не все.
Вы пытались смыть потоки? –
UDP является ненадежным. Спецификация для UDP заявляет, что UDP сделает «лучшее усилие» для получения пакета от источника к получателю, но пакеты могут быть удалены, и получатель/отправитель никогда не будет уведомлен. Если вам нужно надежно отправлять данные, вам понадобится реализовать какую-то схему обнаружения потерь пакетов или вместо этого использовать TCP. Немного странно, что вы теряете столько пакетов в локальном смысле, но нет контракта о том, что локальные UDP-соединения должны быть надежными. – CodeBlind
Я понимаю это, но все же я пытаюсь выяснить, как я могу помочь, чтобы получить как можно больше. –