服务器-客户端通信java
我有这个客户端,服务器信息并不重要。这段代码的输出是非常随机的服务器-客户端通信java,java,client,Java,Client,我有这个客户端,服务器信息并不重要。这段代码的输出是非常随机的 class Client { public static void main(String args[]) throws Exception { BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket("127.
class Client {
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("127.0.0.1", 10004);//this will become the addr of the server you want to input.
InetAddress host = clientSocket.getInetAddress();
// System.out.println(host);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
boolean exit = false;
while (!exit) {
while (inFromServer.ready()) {
System.out.println(inFromServer.readLine());
}
String sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + "\n");
}
clientSocket.close();
}
}
如果我在调试模式下运行它,它总是有正确的结果。例如
- 请输入密码
- 用户类型通过
- 传球正确
- 请键入命令
- 然后键入命令
- 等
- 等
in.ready()
不会等待任何数据可用。如果客户端读取该行时服务器尚未发送数据,则将完全跳过readLine()
只需在时删除该,然后执行一个简单的readLine()
如果在某些阶段需要等待来自服务器的多条线路,则需要实现更多的逻辑。通常,服务器将发送一个“消息结束”标记,以向客户端表明消息已完成。例如,当服务器完成时,它可以发送消息“END-OF-message”。在客户端代码中,您将执行以下操作:
boolean serverDone = false;
while (!serverDone) {
String message = in.readLine();
if (message == null) {
// handle this problem: the server has closed the connection
serverDone = true; // or return, or throw
} else if ("END-OF-MESSAGE".equals(message)) {
serverDone = true;
}
}
.ready()中的不会等待任何数据可用。如果客户端读取该行时服务器尚未发送数据,则将完全跳过readLine()
只需在
时删除该,然后执行一个简单的readLine()
如果在某些阶段需要等待来自服务器的多条线路,则需要实现更多的逻辑。通常,服务器将发送一个“消息结束”标记,以向客户端表明消息已完成。例如,当服务器完成时,它可以发送消息“END-OF-message”。在客户端代码中,您将执行以下操作:
boolean serverDone = false;
while (!serverDone) {
String message = in.readLine();
if (message == null) {
// handle this problem: the server has closed the connection
serverDone = true; // or return, or throw
} else if ("END-OF-MESSAGE".equals(message)) {
serverDone = true;
}
}
是的,你的回答很好,但是,iu如何实现消息的结尾?我只是从另一方发送了一条名为“消息结束”的消息,然后在客户端接收该消息并打破循环?@Martinos:我已经用一个例子更新了我的答案,说明了你如何做到这一点。是的,你的答案说得很好,但是,iu如何实现消息结束?我只是从另一端发送一条名为“消息结束”的消息,然后在客户机上拾取它并打破循环?@Martinos:我已经用一个例子更新了我的答案,说明了如何做到这一点。