【问题标题】:Trouble sending/receiving strings for client/server客户端/服务器发送/接收字符串时出现问题
【发布时间】:2016-11-22 00:37:19
【问题描述】:

我在从客户端向服务器发送和接收字符串时遇到了一点问题。假设我正确设置了套接字。 这是我用来发送/接收服务器端的:

fromClient = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
toClient = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));

String clientInput;
clientInput = fromClient.readLine();

是我的服务器如何接收来自客户端的输入。

客户端相同的交易:

toServer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
fromServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
inputLine = bufferedReader.readLine(); //inputLine reads from the console
toServer.write(inputLine);

我可以向服务器发送一条消息,它会接收它,但是当我取消注释此位时,客户端可以接收来自服务器的响应:

//        serverInput = fromServer.readLine();
//
//        System.out.println(serverInput);

它将挂起,服务器端不会收到发送的初始消息。我不知道出了什么问题,我只想得到服务器的回复。任何帮助表示赞赏。谢谢

【问题讨论】:

  • 你有没有在服务器端调用toClient.write(clientInput)
  • 在clientInput = fromClient.readLine();之后,我打印clientInput,它会打印出来。但如果我使用 "toClient.write("receive this please");"在客户端取消注释该位之后,它将挂起,甚至不会收到初始消息
  • 没关系....我想通了。我必须在写入参数中添加一个 + '\n' ,然后再进行刷新。
  • 没错,我在写答案的时候看到了你的评论。

标签: java sockets server client


【解决方案1】:

BufferedReader.readLine() 将为您去除换行符。

这意味着,在客户端,inputLine 没有尾随 \n,这意味着客户端没有向服务器发送行尾信号,反之亦然。

客户端

toServer.write(...);
toServer.newLine(); // <--- send new line
toServer.flush();   // <--- flush buffered data

服务器应该做类似的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-29
    • 2019-02-25
    • 1970-01-01
    • 2021-12-04
    • 2018-12-20
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    相关资源
    最近更新 更多