繁体   English   中英

将数据从Java Socket Server发送到Python客户端

[英]Send data from Java Socket Server to Python client

我也试图从Java服务器和Python客户端传输数据。 我可以成功地将数据从客户端传输到服务器,但是根本没有收到数据。

在python客户端上,我有这个:(请注意,这是在单独的线程中运行的)

#mp_log is a custom function for logging, treat it as a print.
def listen_loop():
global client_socket

mp_log("Client socket value:")
mp_log(repr(client_socket))

while True:
    mp_log("Waiting on data from the server. Inside while.")

    if client_socket is None:
        mp_log("Client Socket is null, skipping data check.")
        continue
    data = client_socket.recv(1)
    mp_log("Got some data: " + data)

如果此操作成功完成,则输出将是客户端套接字值,在服务器上等待,然后获取一些数据。 但是,它一直在等待数据。

这意味着套接字显然不是None,它正在等待接收缓冲区吗? 我将接收缓冲区的大小设置为1,以查看是否有数据通过。 这是我从服务器发送的代码:

// Earlier in the code, to create the writer. 
this.writer = new PrintWriter(this.socket.getOutputStream(),true);

我已启用自动刷新功能作为测试,以确保实际刷新了数据。

public void send(String data) {
    System.out.println("Sending data to this client.");

    this.writer.println(data);
    this.writer.flush();
}

我知道由于控制台输出出现而正在调用此方法。

我感到奇怪的是,我能够从python客户端发送数据,但没有收到任何东西。 我尝试过但失败的其他事情是使用其他输出方法,例如DataOutputStream。

编辑:添加用于两种语言的套接字创建代码。 Java的:

public Connection(Socket socket) throws IOException {
    this.socket = socket;
    this.reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));

    this.writer = new PrintWriter(this.socket.getOutputStream(),true);

    this.listenThread = new Thread(this);
    this.listenThread.start();

    // Test message
    send("Test Message " + System.currentTimeMillis());
}

和Python:

global client_socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
threading.Thread(target=listen_loop).start()
client_socket.connect(("localhost", 5000))
 `data = client_socket.recv(1)`

尝试通过data=client_socket.recv(1024)进行更改,我想我不确定是否有类似的问题,例如您给recv(1)的数字是您的缓冲区,希望能有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM