【问题标题】:client socket issues when reading阅读时的客户端套接字问题
【发布时间】:2014-07-27 13:56:01
【问题描述】:

我在试图找到解决问题的方法时遇到了一个真正的问题,希望你们能提供帮助。我在网上看到了许多套接字示例,但无法修改它们以供我使用。 Tbh,我什至难以理解套接字。到目前为止我能够修改的内容如下。

我的问题,我相信我的客户端程序没有读取来自服务器的传入消息,有人可以使用我的示例来演示我哪里出错了。我脑海中的某件事告诉我,我的客户端套接字在有机会读取任何传入消息之前就关闭了。也许让客户等到收到消息?如果需要等待,这是如何实现的?提前致谢。

客户:

try {
    Socket socket = new Socket("localhost", 55555);

    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
    out.write(score);

    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String rank = in.readLine();
    System.out.println(rank);

    in.close();            
    out.close();            
    socket.close();
}
catch(Exception e) {
    System.out.print("Whoops! It didn't work!\n");
}

服务器:

try {
    System.out.println("Waitng for client to connect.....");
    ServerSocket server = new ServerSocket(55555);
    Socket socket = server.accept();
    System.out.print("Client has connected!\n");

    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String score = (in.readLine());
    scor = Long.parseLong(score);
    leaderboard(); ///// A METHOD THAT USES LONG SCORE TO CALCULATE RANKING- RETURNS A STRING VALUE CALLED RANK

    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
    System.out.print("Sending rank: " + rank);
    out.write(rank);

    out.close();
    socket.close();
    server.close();
}
catch(Exception e) {
    System.out.print("Whoops! It didn't work!\n")`enter code here`;
}

【问题讨论】:

  • 你有什么例外吗?您是否使用换行符发送 - 您至少在等待一个?
  • 不,我没有遇到任何异常。如果换行的意思是\n,不,我不...应该吗?如果是这样,在哪里,为什么?感谢您的回复。

标签: java string sockets client


【解决方案1】:

您的代码看起来不错...

在您的客户端程序上,您正在使用以下代码编写一行:

out.write(score);

你能把这个改成:

out.println(score);

在你的服务器程序上也做同样的事情来处理回复:

out.println(rank);

让我知道你的进展.. 如果这有帮助,请不要忘记将其投票/标记为解决方案;) 干杯

(顺便说一句,至于问题的原因:: in.read'LINE'() 等待行尾或换行符(\n) 以保存字符串值。如果你使用 out.write( ) 那么您必须手动添加换行符 (\n) 才能完整读取字符串。如果您使用 out.printline,则 \n 会自动添加到发送的每个字符串中。

您程序中的 readline 方法正在等待换行符,这就是您的程序卡在那个位置的原因)

【讨论】:

  • 谢谢你,谢谢你的解释,我已经用这个插座问题玩了三天,没有多少头发可以拔掉。干杯。
  • 不用担心。一旦你得到足够的练习,它就很容易(而且很有趣)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 2021-03-31
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多