我在寻找解决问题的方法时遇到了一个真正的问题,并希望你们能提供帮助。我在网上看过很多套接字示例但是无法修改它们供我使用。 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`;
}
答案 0 :(得分:3)
您的代码看起来不错......
在您的客户端程序中,您使用以下方式编写一行:
out.write(score);
你可以改成:
out.println(score);
在您的服务器程序中也要这样做以处理回复:
out.println(rank);
让我知道你怎么走...... 如果这有帮助,也不要忘记将此作为解决方案进行upvote / mark;) 欢呼声
(顺便说一下,导致问题的原因是:in.read' LINE'()等待一行或换行符的结尾(\ n)以保存字符串值。如果你使用out.write()然后你必须手动换行字符(\ n)才能完全读取字符串。如果你使用out.printline,那么\ n会自动添加到每个发送的字符串中。
您程序中的readline方法正在等待换行符,这就是您的程序卡在该位置的原因)