Отправка изображений с клиента на сервер с помощью сокетов - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу отправить изображения с клиента на сервер в Java. Я нашел один способ сделать это с помощью сокетов. Мой код выглядит следующим образом:

Сторона сервера: поток, ожидающий клиентских сокетов и получающий образ при подключении клиента:

@Override
public void run() {
    while (running) {   
        try(Socket clientSocket = serverSocket.accept();
            PrintWriter outText = new PrintWriter(clientSocket.getOutputStream(), true);
            BufferedReader intText = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        ) {

            try {
                // Get image info
                String imageInfo = inText.readLine();
                BufferedImage image = ImageIO.read(ImageIO.createImageInputStream(clientSocket.getInputStream()));

                // Handle input
                String[] split = imageInfo.split(";");
                String typeStr = split[0];
                String name = split[1];
                ServerImageType type = ServerImageType.fromInt(Integer.valueOf(typeStr));

                // Save image
                SaveImageThread saveImageThread = new SaveImageThread(image, name, type);
                saveImageThread.start();

                // Respond
                outText.println(name + " OK");

            } catch (IOException e) {
                System.err.out("The server is in pain: " + e);
            } 
        }
    }

    try {
        serverSocket.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Клиентская сторона:

public void sendImage(BufferedImage image, String name, ServerImageType imageType) throws IOException {
    try(Socket clientSocket = new Socket(serverName, txPort);
           PrintWriter outText = new PrintWriter(clientSocket.getOutputStream(), true);
           BufferedReader inText = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))
    ) {
        // Send image info
        String imageInfo = imageType.getId() + ";" + name;
        outText.println(imageInfo);

        // Send image
        ImageIO.write(image, "JPG", clientSocket.getOutputStream());

        // Receive acknowledgement
        String input = inText.readLine();
        System.out.println("Server answered: " + input);
    }
}

Проблема: сервер застревает на ImageIO.read (... строке .. Есть идеи?

1 Ответ

0 голосов
/ 28 апреля 2018

Я не вижу clientSocket.getOutputStream (). Flush ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...