我遇到了一个真正的问题,试图找到解决问题的方法,希望你们能提供帮助。我在网上看到了许多套接字示例,但无法对其进行修改以供我使用。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`;
}
您的代码看起来不错...
在您的客户端程序上,您正在使用以下代码编写一行:
out.write(score);
您可以将其更改为:
out.println(score);
也对服务器程序执行相同的操作以处理回复:
out.println(rank);
让我知道您的前进方式..如果这样做有帮助,请不要忘记投票/将其标记为解决方案;)
(顺便说一下,关于引起问题的原因:: in.read'LINE'()等待行尾或换行符(\ n)保存字符串值。如果使用out.write(),则您必须手动输入一个换行符(\ n)才能完全读取该字符串。如果使用out.printline,则\ n会自动添加到发送的每个字符串中。
程序中的readline方法正在等待换行符,这就是为什么程序被卡在该位置的原因)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句