Java回显服务器

标签 java echo

大家好,我正在尝试通过java做一个echo服务器,但它不起作用..我不知道为什么..但看起来服务器正在等待客户端,而客户端正在等待服务器.. ..所以他们无法互相传递信息..

这是代码 对于服务器

    ServerSocket server = null;
        try {
             server = new ServerSocket(3333);
              System.out.println("Listening on 3333");
    } catch (IOException ex) {
        System.out.println("Error can't connect to 3333");
        System.exit(1);
    }

        Socket clientSocket = null;
    try {
        clientSocket = server.accept();
    } catch (IOException ex) {
        System.out.println("Accept fail");
        System.exit(1);
    }
    PrintWriter out = null;
    try {
         out = new PrintWriter(clientSocket.getOutputStream());
    } catch (IOException ex) {
        Logger.getLogger(JavaApplication20.class.getName()).log(Level.SEVERE, null, ex);
    }
    BufferedReader br = null;
    try {
        br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    } catch (IOException ex) {
        Logger.getLogger(JavaApplication20.class.getName()).log(Level.SEVERE, null, ex);
    }
    BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

    String inputLine, outputLine;
 while(!(inputLine=br.readLine()).equals("bye"))
            {
                out.print("echo: " + inputLine);

            }
    out.close();
    br.close();
    clientSocket.close();
    server.close();
    System.out.println("Server Exited");

这是客户端的代码

 Socket client = null;
   try {
        client = new Socket("localhost", 3333);
        System.out.println("Connected on 3333");
    } catch (UnknownHostException ex) {
        System.out.println("Couldn't connect to the server");
        System.exit(1);
    } catch (IOException ex) {
        Logger.getLogger(KnockKnockClient.class.getName()).log(Level.SEVERE, null, ex);
    }


    PrintWriter out = null;
    BufferedReader in = null;
    BufferedReader stdIn = null;

    try {
        out = new PrintWriter(client.getOutputStream(), true);
    } catch (IOException ex) {
        Logger.getLogger(KnockKnockClient.class.getName()).log(Level.SEVERE, null, ex);
    }
    try {
        in = new BufferedReader(new InputStreamReader(client.getInputStream()));
    } catch (IOException ex) {
        Logger.getLogger(KnockKnockClient.class.getName()).log(Level.SEVERE, null, ex);
    }
    stdIn = new BufferedReader(new InputStreamReader(System.in));

    String fromServer, fromUser;


    while((fromUser=stdIn.readLine())!=null)
        {
            System.out.println("From user: "+ fromUser);

            out.print(fromUser);
            fromServer=in.readLine();
            System.out.println(fromServer);
        }



    out.close();
    stdIn.close();
    in.close();
    client.close();

    System.out.println("client Exited");

有什么帮助吗?

最佳答案

您正在从客户端发送一些字符串(例如“Hello”),并且您尝试在服务器上使用 readLine() 读取它(反之亦然)。 readLine() 仅在找到 EOL 字符或输入流关闭后才返回。

由于客户端没有发送任何 EOL 字符,因此服务器无限期地等待,客户端也因为等待服务器的答复而无限期地等待。

发送“Hello\n”,效果会更好。

关于Java回显服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13767751/

相关文章:

php - 如何在 PHP 中回显不同的计数?

bash printf + 回显字符串

java - Android 以编程方式加载字符串资源

javax.persistence.PersistenceException : [PersistenceUnit: sapo] class or package not found

java - 线程中的异常 "main"java.lang.StackOverflowError 递归

php - 从 PHP 和 HTML 中的回显文本字段获取输入?

bash - 当我启动终端时,我得到 "login:/usr/local/bin/bash: No such file or directory [Process completed]"并且我无法在终端中输入任何内容

php - 如何回显 li 的单个 css 类?

java - 更改另一个线程中的 while 循环条件,没有任何反应?

java - 无法在 java 中使用 geckodriver 启动 FireFox 自定义配置文件