Почему мой сервер JAVA не может связаться с клиентом Python после получения данных с использованием DataInputStream и FileOutputStream? - PullRequest
0 голосов
/ 22 февраля 2019

Мой JAVA-сервер может получать и отправлять String клиенту Python3 с использованием этих кодов

BufferedReader br = new BufferedReader(new InputStreamReader(Socket.getInputStream(), "UTF-8"));

br.readLine()

PrintWriter pw = new PrintWriter(Socket.getOutputStream(), true);

pw.print("Message");
pw.flush();

, а My Python-клиент также может получать и отправлять String с использованием recv и sendall.

Но когда яДобавьте несколько кодов между br.readLine () и pw.print ("message") или pw.print ("message") и br.readLine () или в верхней части кодов, чтобы получить файл изображения от клиента Python3 с использованием DataInputStream и FileOutputStreamЯ не могу успешно отправлять и получать данные.

Я могу сделать это только тогда, когда добавляю коды внизу.Ниже приведены коды JAVA и коды Python 3, которые я могу успешно отправлять и получать данные.Он работает, но может только получать строку → отправлять строку → получать файл изображения (короче говоря, он не работает после получения файла изображения)

JAVA:

package 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 test {

public static void main(String[] args) {

        ServerSocket Server = null;

        try {
            Server = new ServerSocket(7000);
            System.out.println("Server is on\n");

            Socket Socket = Server.accept();
            System.out.println("A client is connected\n");

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

            DataInputStream dis = new DataInputStream(Socket.getInputStream());
            FileOutputStream fos = new FileOutputStream("C:\\Users\\USER\\Documents\\eclipse-workspace\\test//1.jpg");

            String a = br.readLine();
            System.out.println(a);
            String b = br.readLine();
            System.out.println(b);
            String c = br.readLine();
            System.out.println(c);

            pw.print("Message");
            pw.flush();

            String d = br.readLine();
            System.out.println(d);

            byte[] buffer = new byte[4096];
            int len = 0;
            while ((len = dis.read(buffer)) > 0) {
                fos.write(buffer, 0, len);
            }
            fos.flush();

            fos.close();
            dis.close();
            br.close();
            pw.close();
            Socket.close();

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

}

Python 3:

from socket import *

HOST = '' # sorry it is my ip
PORT = 7000
BUFSIZE = 1024

client = socket(AF_INET, SOCK_STREAM)

image1 = '/home/pi/Downloads/5.jpg'
image2 = open(image1, 'rb')
image3 = image2.read()

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

    client.sendall(bytes("A\nB\nC\n", encoding = 'utf8'))

    msg = client.recv(1024)
    msg = msg.decode()
    print(msg)

    client.sendall(bytes("D\n", encoding = 'utf8'))

    client.sendall(image3)

    client.close()
except Exception as e:
    print(e)

но когда я перемещаю

byte[] buffer = new byte[4096];
int len = 0;
while ((len = dis.read(buffer)) > 0) {
    fos.write(buffer, 0, len);
}
fos.flush();
fos.close();

эти коды в другую позицию, это не работает .. Я уже пытался использовать только DataInputStream, DataOutputStream вместо BufferedReader и PrintWriter ..

Мне жаль, что я не могу хорошо объяснить. Короче говоря, я хочу, чтобы мой JAVA-сервер непрерывно отправлял и получал String и файл изображения.

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