[英]Java Socket Server Communication to Python client, program won't enter “inputLine = in.readLine()”-loop
I'm trying to create a socket server in Java that can communicate with a python client. 我正在尝试用Java创建可以与python客户端通信的套接字服务器。 I ran into the problem that everything executes fine if I start the server, send a message through python, and then immediately exit, but if the client sends a message and then listens to the socket again the server won't respond.
我遇到了一个问题,如果我启动服务器,通过python发送一条消息,然后立即退出,那么一切运行正常,但是如果客户端发送一条消息,然后再次监听套接字,服务器将不会响应。
Here's the code, mostly taken from this example from oracle 这是代码,主要来自oracle的此示例
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());
}
}
}
And the python code for good measure: 和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')
With this code the output from the java server is: 使用此代码,java服务器的输出为:
Over while
In while
Outputting True
Passed while.
And the client output is: 客户端输出为:
1024
Ready
After which the connection breaks. 之后,连接断开。
But if I add this line to the client: new_message = sock.recv(msg_len).decode("UTF-8")
Making the new python: 但是,如果我将此行添加到客户端:
new_message = sock.recv(msg_len).decode("UTF-8")
制作新的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")
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")
The server jams and the output is only: 服务器阻塞,输出仅为:
Over while
While the client outputs: 当客户端输出:
1024
Ready
While also jamming. 同时也干扰。
Any ideas what is going on here? 有什么想法吗?
Turns out it was the python socket that needed to flush. 原来是需要刷新的python套接字。 New python code:
新的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")
print(len(init_message))
init_message = init_message.replace('0', '')
print(init_message)
sock.send(b'3\n')
new_message = sock.recv(msg_len).decode("UTF-8")
print(new_message)
(added \\n) to the message going out. (在\\ n后面添加了)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.