【发布时间】:2020-03-31 07:06:19
【问题描述】:
我有一个命令系统在我的 TCP 服务器和客户端 (Java) 之间进行通信。我可以向我的客户端发送特定的命令,如果客户端收到命令,它将执行某些操作。
基本上,这行得通。但有时我必须发送命令 + 额外信息。问题是:信息有时会发送得太快。所以一些信息会丢失/混淆,我的客户无法正确执行请求。
我的解决方案是使用Thread.sleep(),但这既不干净也不高效。因为仍然存在无法正确接收信息的风险。
我的服务器:
public void sendCommand(Socket socket) throws InterruptedException, IOException {
writeMsg("CMD_POPUP", socket);
Thread.sleep(150);
writeMsg("foo", socket);
Thread.sleep(150);
writeMsg("bar", socket);
Thread.sleep(150);
writeMsg("baz", socket);
}
public void writeMsg(String message, Socket socket) throws IOException {
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeUTF(message);
}
我的客户:
public void interpreteCommand(Socket socket) throws IOException {
while (true) {
switch (readMsg(socket)) {
case "CMD_POPUP":
System.out.println(readMsg(socket));
System.out.println(readMsg(socket)); //Sometimes it would be 'bar' but also sometimes it would be 'baz'
System.out.println(readMsg(socket)); //Sometimes it would be 'baz' but also sometimes it would be nothing
break;
}
}
}
public String readMsg(Socket socket) throws IOException {
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
return in.readUTF();
}
【问题讨论】:
标签: java sockets networking tcp