Java UDP сервер не принимает больше одного пакета

Рейтинг: 0Ответов: 0Опубликовано: 09.02.2023

Есть клиент который отправляет картинку по частям в 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);
    }

}

Ответы

Ответов пока нет.