Java UDP сервер не принимает больше одного пакета
Есть клиент который отправляет картинку по частям в 2048 байтах. В ней 3 части.
Сервер принимает только первую часть и всё. Забавно что от перемены картинки берётся только первая часть.
По идее любой входящий пакет должен содержаться в inputPacket.getData(). Его содержимое меняется, но я не могу сложить его воедино.
Вот TCP нормально работает, а UDP нет. Читал что это возможно из-за брендмауэра.
Колхоз с Thread и while, чтобы работало без остановки в асинхронном режиме.
Где cv_img и т.д. это для того чтобы, сохранить полученные пакеты обратно в картинку.
public class Server_UDP {
private ServerSocket serverSocket;
private Socket userSocket;
private PrintWriter dataOutput;
private BufferedReader dataInput;
public BufferedImage cv_img;
public byte[] byteArray = null;
DatagramSocket aSocket = null;
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
public void start(int port) throws IOException {
serverSocket = new ServerSocket(port);
Thread T = new Thread(() -> {
try {
DatagramSocket serverSocket = new DatagramSocket(port);
byte[] receivingDataBuffer = new byte[100000000];
while (true) {
try {
DatagramPacket inputPacket = new DatagramPacket(receivingDataBuffer, receivingDataBuffer.length);
serverSocket.receive(inputPacket);
String modifiedSentence = new String(inputPacket.getData());
byteArray = inputPacket.getData();
System.out.println(modifiedSentence);
} catch (SocketException ex) {
Logger.getLogger(Server_UDP.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Server_UDP.class.getName()).log(Level.SEVERE, null, ex);
}
//System.out.println(Arrays.toString(byteArray));
cv_img = ImageIO.read(new ByteArrayInputStream(byteArray));
File outputfile = new File("G:\\Code_K\\dipolom\\image.png");
ImageIO.write(cv_img, "png", outputfile);
if (port == 0) {
break;
}
}
} catch (SocketException ex) {
Logger.getLogger(Server_UDP.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Server_UDP.class.getName()).log(Level.SEVERE, null, ex);
}
});
T.start();
//stop();
System.out.println("STOP");
}
private void stop() throws IOException {
if (serverSocket != null) {
serverSocket.close();
}
if (userSocket != null) {
userSocket.close();
}
if (dataOutput != null) {
dataOutput.close();
}
if (dataInput != null) {
dataInput.close();
}
}
public static void main(String[] args) throws IOException {
Server_UDP server = new Server_UDP();
server.start(17777);
}
}
Источник: Stack Overflow на русском