Я тоже пытаюсь передать данные и с сервера 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))