我有一个程序,用户可以猜出一个数字。但是当用户猜到正确的号码时,我想阻止来自所有客户端的所有消息5秒钟。
for(ClientThread clients : clientThreads)
{
clients.SendGetalToServer(message);
clients.sleep(5000);
clients.interrupt();
}
这适用于Thread.sleep
但是在5秒之后,当我在Thread.sleep
的5秒内输入时,服务器和所有客户端都收到了所有消息。
我该如何解决这个问题?
我有一个程序,用户可以猜出一个数字。但是当用户猜到正确的号码时,我想阻止来自所有客户端的所有消息5秒钟。我正在尝试使用Thread.sleep(5000)这是有效的,但在那之后的5秒内,我在Thread.sleep期间输入的所有消息都将发送给所有客户端。
下面是我的原始代码。没有Thread.sleep方法
ServerThread
public class ClientThread extends Thread {
private Socket socket;
private Server server;
private PrintWriter out;
private BufferedReader in;
private Scanner scanner;
private String username = null;
private boolean isloggedIn = false;
public ClientThread(Socket socket,Server server)
{
this.socket = socket;
this.server = server;
}
public Socket socket()
{
return socket;
}
@Override
public void run() {
try {
out = new PrintWriter(socket.getOutputStream());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
scanner = new Scanner(socket.getInputStream());
String line = "";
out.print("Kies een username: ");
out.flush();
while((line = scanner.nextLine()) != null) {
if (!isloggedIn) {
username = line;
isloggedIn = true;
out.println("U heeft " + username + " gekozen");
out.println("kies een getal");
out.flush();
} else
{
int g = Integer.parseInt(line);
if (g == server.getTeradengetal()) {
server.broadcastGetal(username);
System.out.println(line);
server.setTeradengetal();
} else if (g > server.getTeradengetal()) {
out.println("Lower");
out.flush();
System.out.println(line);
} else if (g < server.getTeradengetal()) {
out.println("Higher");
out.flush();
System.out.println(line);
}
}
}
} catch (InterruptedException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
public void SendGetalToServer(String message)
{
sendMessage(message);
}
public void sendMessage(String message)
{
out.println(message + " heeft het getal juist geraden");
out.flush();
}
}
服务器
public class Server {
private ServerSocket serverSocket;
private Socket socket;
private List<ClientThread> clientThreads;
private int teradengetal = 10;
private boolean juistgeraden = false;
public Server() throws IOException {
serverSocket = new ServerSocket(6000);
clientThreads = new ArrayList<>();
while(true)
{
socket = serverSocket.accept();
System.out.println("Client connected");
ClientThread clientThread = new ClientThread(socket,this);
clientThread.start();
clientThreads.add(clientThread);
}
}
public void setTeradengetal()
{
this.teradengetal = (int) Math.floor(Math.random() * 10);
}
public int getTeradengetal()
{
return teradengetal;
}
public void broadcastGetal(String message) throws InterruptedException {
for(ClientThread clients : clientThreads)
{
clients.SendGetalToServer(message);
}
}