Отправка данных с Java Socket Server на клиент Python - PullRequest
0 голосов
/ 15 декабря 2018

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

1 Ответ

0 голосов
/ 15 декабря 2018
 `data = client_socket.recv(1)`

Попробуйте изменить это на data=client_socket.recv(1024) Я думаю, я не уверен, что у меня была похожая проблема, например, что число, которое вы дали recv (1), является вашим буфером, желание может помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...