Почему я не могу перенести строку после передачи файла изображения с клиента Python на сервер Java? - PullRequest
0 голосов
/ 04 апреля 2019

Моя цель - передать строковые данные после передачи файла изображения с клиента Python на Java-сервер.

Я могу успешно передавать только строковые данные между Java-сервером и Python-клиентом, но при добавлении кода передачи файла изображения между строкойкод передачи данных мой код застревает или получает нулевое значение.

Короче говоря, я не могу отправить строковые данные с сервера Java на клиент Python и с клиента Python на сервер Java после передачи файла изображения с клиента Python на сервер Java.

Моя версия java eclipse - 2018-12 (4.10.0), а версия python - python 3.

1.JAVA-код сервера

package socket_test;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class socket_test {
    public static void main(String[] args) {

        ServerSocket server = null;

        try {
            server = new ServerSocket(8000);
            Socket client = server.accept();

            BufferedReader br = new BufferedReader(
                    new InputStreamReader(
                            client.getInputStream(), "UTF-8"
                    )
            );
            PrintWriter pw = new PrintWriter(client.getOutputStream(), true);

            String message_1 = br.readLine();
            System.out.println(message_1 + "\n");

            pw.print("Server: Hello");
            pw.flush();

            String message_2 = br.readLine();
            System.out.println(message_2 + "\n");

            pw.print("Server: I am good");
            pw.flush();

            DataInputStream dis = new DataInputStream(client.getInputStream());
            FileOutputStream fos = new FileOutputStream("C:\\Users\\user\\Documents\\eclipse-workspace\\socket_test\\img\\1.jpg");

            byte[] buffer = new byte[4096];
            int len = 0;
            while ((len = dis.read(buffer)) > 0) {
                fos.write(buffer, 0, len);
            }
            fos.close();
            // after this I can't transfer string data anymore.. when i use pw.print then code gets stuck and message_4 gets null.

            String message_4 = br.readLine();
            System.out.println(message_4 + "\n");
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            server.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

2.Pythonкод клиента

from socket import *
from select import select
import sys

HOST = '' # sorry it is my ip
PORT = 8000

client = socket(AF_INET, SOCK_STREAM)

image = '/home/pi/Downloads/1.jpg'

try:
    client.connect((HOST,PORT))

    client.sendall(bytes("Client: Hello", encoding = 'utf8'))
    client.sendall(bytes("\n", encoding = 'utf8'))

    reply = client.recv(1024)
    reply = reply.decode()
    print(reply, "\n")

    client.sendall(bytes("Client: How are you?", encoding = 'utf8'))
    client.sendall(bytes("\n", encoding = 'utf8'))

    reply = client.recv(1024)
    reply = reply.decode()
    print(reply, "\n")

    img = open(image, 'rb')
    converted_img = img.read()
    client.sendall(converted_img)
    img.close()

    client.sendall(bytes("Client: See you again", encoding = 'utf8'))
    client.sendall(bytes("\n", encoding = 'utf8'))

    client.close()
except Exception as e:
    print(e)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...