Я пытаюсь создать сервер сокетов в Java, который может взаимодействовать с клиентом Python. Я столкнулся с проблемой, что все работает нормально, если я запускаю сервер, отправляю сообщение через python, а затем сразу же завершаю работу, но если клиент отправляет сообщение и затем снова прослушивает сокет, сервер не отвечает.
Вот код, в основном взятый из этот пример из оракула
public class PrimeServer {
public static void main(String[] args) throws IOException {
int portNumber = 4444;
try (
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()))
) {
String inputLine;
String outputLine;
String rawMessage;
// Initiate conversation with client
PrimeProtocol ppc = new PrimeProtocol();
outputLine = String.format("%1022s", "Ready").replace(' ', '0');
out.println(outputLine);
System.out.println("Over while");
while ((inputLine = in.readLine()) != null) {
System.out.println("In while");
if (ppc.processInput(Integer.parseInt(inputLine))){
rawMessage = "True";
} else {
rawMessage = "False";
}
outputLine = String.format("%1024s", rawMessage).replace(' ', '0');
System.out.println("Outputting " + rawMessage);
out.println(outputLine);
}
System.out.println("Passed while.");
} catch (IOException e) {
System.out.println("Exception caught when trying to listen on port "
+ portNumber + " or listening for a connection");
System.out.println(e.getMessage());
}
}
}
И код Python для хорошей меры:
msg_len = 1024
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("127.0.0.1", 4444))
init_message = sock.recv(msg_len).decode("UTF-8")
init_message = init_message.replace('0', '')
print(init_message)
print(len(init_message))
sock.send(b'3')
С этим кодом вывод с сервера java:
Over while
In while
Outputting True
Passed while.
И вывод клиента:
1024
Ready
После чего разрывается соединение.
Но если я добавлю эту строку клиенту: new_message = sock.recv(msg_len).decode("UTF-8")
Создание нового питона:
msg_len = 1024
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("127.0.0.1", 4444))
init_message = sock.recv(msg_len).decode("UTF-8")
print(len(init_message))
init_message = init_message.replace('0', '')
print(init_message)
sock.send(b'3')
new_message = sock.recv(msg_len).decode("UTF-8")
Сервер застревает и вывод только:
Over while
Пока клиент выводит:
1024
Ready
при глушении.
Есть идеи, что здесь происходит?