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();

    }