我也试图从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))
答案 0 :(得分:0)
`data = client_socket.recv(1)`
尝试通过data=client_socket.recv(1024)
进行更改
我想我不确定是否有类似的问题,例如您给recv(1)的数字是否是您的缓冲区,希望能对您有所帮助