通过TCP将二进制文件从Python服务器发送到Java客户端

通过TCP将二进制文件从Python服务器发送到Java客户端,java,python,image,tcp,Java,Python,Image,Tcp,我正在尝试通过TCP发送二进制文件。服务器用Python编写,客户端用Java编写 服务器: import socket; TCP_IP = '127.0.0.1' TCP_PORT = 5001; BUFFER_SIZE = 1024; try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((TCP_IP, TCP_PORT)) s.listen(1) except: "Can

我正在尝试通过TCP发送二进制文件。服务器用Python编写,客户端用Java编写

服务器:

import socket;

TCP_IP = '127.0.0.1'
TCP_PORT = 5001;

BUFFER_SIZE = 1024;

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((TCP_IP, TCP_PORT))
    s.listen(1)
except:
    "Can not bind server on port: "+ str(TCP_PORT) +"\n";

while 1:
    print("Wait for connections!!!\n");
    conn, addr = s.accept();
    print("Receive a new connection!!!\n");

# presentation of client
data = conn.recv(BUFFER_SIZE);
if not data:
    conn.close();
    print("Lost connection!!!");
    continue;

# respond to client
conn.sendall("Hello 1\n");

# receive new request
data = conn.recv(BUFFER_SIZE);
if not data:
    continue;

conn.sendall("OK\n");

f = open('testImage.jpg', "rb");
dataRaw = f.read();
f.close();

fileSize = len(dataRaw); #sys.getsizeof(dataRaw);

# send file size
conn.send(str(fileSize) + "\n");

conn.send(dataRaw);

conn.sendall("OK\n");
客户端

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class mainTestReceiveFile
{
    public static void main(String[] args) throws Exception
    {
        String usr2ConnectDefault = "127.0.0.1";
        int port2ConnectDefault = 5001;
        Socket socket;
        BufferedReader in;
        PrintWriter out;

        socket = new Socket(usr2ConnectDefault, port2ConnectDefault);
        System.out.println("Connected to server...sending echo string");

        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        out = new PrintWriter(socket.getOutputStream(),true);

        // say hello to server
        out.println("Hello");
        // read hello from server
        String readString = in.readLine();
        System.out.println(readString);

        out.println("ReadFile");

        // verify if request is OK
        readString = in.readLine();
        if(readString.compareToIgnoreCase("OK") == 0)
            System.out.println("Receive new file!!!");
        else
        {
            socket.close();
            return;
        }

        // get size of file
        readString = in.readLine();
        int sizeOfFile = Integer.parseInt(readString);
        //InputStream is = socket.getInputStream();
        byte[] fileData = new byte[sizeOfFile];

        for(int i = 0; i < sizeOfFile; i++)
        {
            fileData[i] = (byte)in.read();
        }

        // save file to disk
        FileOutputStream fos = new FileOutputStream("fileImage.jpg");
        try
        {
            fos.write(fileData);
        }
        finally {
            fos.close();
        }

        // verify if request is OK
        readString = in.readLine();
        if(readString.compareToIgnoreCase("OK") == 0)
            System.out.println("New file received!!!");
        else
        {
            socket.close();
            return;
        }

        socket.close();
    }
}
导入java.io.BufferedReader;
导入java.io.FileOutputStream;
导入java.io.InputStreamReader;
导入java.io.PrintWriter;
导入java.net.Socket;
公共类mainTestReceiveFile
{
公共静态void main(字符串[]args)引发异常
{
字符串usr2ConnectDefault=“127.0.0.1”;
int port2ConnectDefault=5001;
插座;
缓冲读取器;
打印输出;
套接字=新套接字(usr2ConnectDefault,port2ConnectDefault);
System.out.println(“连接到服务器…发送回显字符串”);
in=新的BufferedReader(新的InputStreamReader(socket.getInputStream());
out=新的PrintWriter(socket.getOutputStream(),true);
//向服务器问好
out.println(“你好”);
//从服务器读取hello
String readString=in.readLine();
System.out.println(readString);
out.println(“ReadFile”);
//验证请求是否正常
readString=in.readLine();
if(readString.compareToIgnoreCase(“OK”)==0)
System.out.println(“接收新文件!!!”;
其他的
{
socket.close();
回来
}
//获取文件大小
readString=in.readLine();
int-sizeOfFile=Integer.parseInt(readString);
//InputStream=socket.getInputStream();
字节[]文件数据=新字节[sizeOfFile];
对于(int i=0;i

我试图发送例如一个图像。在客户端,接收到的图像大小(文件大小和像素数)相同,但数据已损坏。

您的代码已损坏。服务器python源文件中存在一些意外的
continue
BufferedReader
应该读取。。。文本通过发送图像,您要求它读取一些二进制数据。对于二进制数据,请使用
BufferedInputStream
我尝试使用BufferedInputStream读取bin,使用BufferedReader读取char,因为我想继续作为测试进行读取。BufferedReader in=新的BufferedReader(新的InputStreamReader(inputStream));BufferedInputStream inBin=新的BufferedInputStream(inputStream);尝试在readString=in.readLine()行中读取OK时的客户端块;我需要做什么?图像接收正确。