读取时客户端套接字问题

时间:2014-07-27 13:56:02

标签: java string sockets client

我在寻找解决问题的方法时遇到了一个真正的问题,并希望你们能提供帮助。我在网上看过很多套接字示例但是无法修改它们供我使用。 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");
}

SERVER:

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`;
}

1 个答案:

答案 0 :(得分:3)

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

在您的客户端程序中,您使用以下方式编写一行:

out.write(score);

你可以改成:

out.println(score);

在您的服务器程序中也要这样做以处理回复:

out.println(rank);

让我知道你怎么走...... 如果这有帮助,也不要忘记将此作为解决方案进行upvote / mark;) 欢呼声

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

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