Java 带有循环消息传递的简单客户端服务器
我正在尝试实现一个简单的客户机-服务器程序,该程序将持续交换消息,直到客户机决定停止。我找到了很多关于这个主题的教程,但是我正在努力正确地实现循环。服务器处理第一个请求,但不处理其他请求 这可能是一个愚蠢的错误,所以请原谅我问了这样一个基本的问题——我对插座还不熟悉。我很高兴能得到任何帮助。我提供了所有代码(基于我找到的一些示例): 客户:Java 带有循环消息传递的简单客户端服务器,java,sockets,Java,Sockets,我正在尝试实现一个简单的客户机-服务器程序,该程序将持续交换消息,直到客户机决定停止。我找到了很多关于这个主题的教程,但是我正在努力正确地实现循环。服务器处理第一个请求,但不处理其他请求 这可能是一个愚蠢的错误,所以请原谅我问了这样一个基本的问题——我对插座还不熟悉。我很高兴能得到任何帮助。我提供了所有代码(基于我找到的一些示例): 客户: public class Client { public static void main(String argv[]) throws Except
public class Client {
public static void main(String argv[]) throws Exception {
talkWithServer();
}
private static void talkWithServer() throws UnknownHostException, IOException {
String sentence;
String serverResponse;
BufferedReader brClient = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("localhost", 9000);
DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader brServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
while(true) {
sentence = brClient.readLine();
out.writeBytes(sentence + '\n');
serverResponse = brServer.readLine();
System.out.println(serverResponse);
if (serverResponse.contains("<BYE>")) {
break;
}
}
clientSocket.close();
}
}
协议:
public class Protocol {
public String processInput(String theInput) {
String theOutput = "> " + theInput;
return theOutput;
}
}
为了便于调试,我简化了示例。谢谢你的提示 我猜是“套接字连接Socket=welcomeSocket.accept();”
如果我没记错的话,每次都会尝试接受新客户机,因为您只连接了一个,所以它将在第二次迭代中永远在这条线上等待。
我建议您在while循环之前粘贴该行。试试下面的方法
Socket connectionSocket = welcomeSocket.accept();
while (true) {
BufferedReader inFromClient = new BufferedReader(
new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(
connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
String response = protocol.processInput(clientSentence);
outToClient.writeBytes(response + '\n');
outToClient.flush();
}
你解决了问题,谢谢!工作就像一个符咒:)
Socket connectionSocket = welcomeSocket.accept();
while (true) {
BufferedReader inFromClient = new BufferedReader(
new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(
connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
String response = protocol.processInput(clientSentence);
outToClient.writeBytes(response + '\n');
outToClient.flush();
}