Мой 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 и файл изображения.