java - 客户端的 BufferedReader 未使用套接字从服务器接收行(Java)

标签 java sockets

我正在尝试在服务器和客户端之间创建一个聊天应用程序,它们是单独的类。我没有复制整个代码,但这是我不确定设置是否正确的部分:

服务器:

    ServerSocket s = null;
    Socket c = null;
    s = new ServerSocket(5002);

    c = s.accept();


    BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()))
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(c.getOutputStream()));

    out.flush();
    String line;
    line = in.readLine();
    out.write("#W|Welcome");
    line = in.readLine();
    out.write("#W|Welcome");
    line = in.readLine();
    out.write("#W|Welcome");

客户:

    Socket socket = new Socket("localhost", 5002);

    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream  ()));
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

    String line;
    out.flush();
    out.write("#J|test");
    line = in.readLine();
    out.write("#J|test");
    line = in.readLine();

客户端执行 out.println() 后,服务器的 in.readLine() 获取该行。但当情况相反时,客户端会在 in.readLine() 处继续等待。 (我使用调试器并观察服务器执行 out.println() 并跳过它,而客户端仍然停留在 in.readLine()

我的数据流设置是否正确,或者我的代码在其他地方是否可能存在错误?我不确定如何检查调试器是否正确连接了流。

最佳答案

[引用我上面的评论:]

There is nothing here that [reads or] writes lines.

这仍然是事实。你所拥有的只是:

out.write("#W|Welcome");

等等

don't forget to call newLine() as necessary

你忘了。

关于java - 客户端的 BufferedReader 未使用套接字从服务器接收行(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34123804/

相关文章:

java - Nexus Repository Manager - 删除旧的二进制资源

java - GameLogic,x 连续游戏

java - 关闭 BufferedWriter/Reader 会影响绑定(bind)到同一套接字的其他实例吗?

javascript - 多个套接字客户端

java - Java中无法使用Object将字符串添加到List中

java - 我应该用什么替换 sun.awt.shell.ShellFolder 这样我就不会收到编译警告?

java - Spring - 将 Web 表单绑定(bind)到 application.properties 文件

node.js - Firefox 插件中的 Socket.io

Java:如何从一个端口上的客户端套接字连接到不同的服务器?

ios - 将 UDP 套接字绑定(bind)到蜂窝 IP