gpt4 book ai didi

java - 客户端和服务器如何暂停以等待对方发送下一条消息?

转载 作者:行者123 更新时间:2023-12-01 10:06:54 24 4
gpt4 key购买 nike

我正在构建一个 Java 客户端和服务器来玩猜我的数字游戏。服务器告诉客户端数字的范围,客户端输入猜测,如果客户端猜对了正确的数字,服务器将返回“再试一次”或该数字。服务器也需要是多线程的。

我已经完成了服务器发送范围的部分,但我无法让服务器和客户端在 Client.java 和 WorkerRunnable.java 中的注释指示的点处暂停。我需要服务器和客户端此时暂停,以便等待接收来自相应发送者的消息。

import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;

public class GameServer implements Runnable{

public int serverPort = 8080;
public ServerSocket serverSocket = null;
public boolean isStopped = false;
public Thread runningThread = null;

public GameServer() {
this.serverPort = 8080;
}

public GameServer(int port) {
this.serverPort = port;
}

public void run() {

synchronized(this) {
this.runningThread = Thread.currentThread();
}
openServerSocket();
while(!this.isStopped) {
Socket clientSocket = null;
try {
clientSocket = this.serverSocket.accept();
}catch (IOException e) {
if(this.isStopped) {
System.out.println("The server has been stopped.");
return;
}
}
new Thread(new WorkerRunnable(clientSocket, "Oi m8")).start();
}
System.out.println("The server has been stopped.");

}

public synchronized void stop() {
this.isStopped = true;
try {
this.serverSocket.close();
}catch (IOException e) {
System.out.println("Error closing server.");
}
}

private void openServerSocket() {
try {
this.serverSocket = new ServerSocket(this.serverPort);
}catch (IOException e) {
System.out.println("Error opening server.");
}
}

}


public class Server {

public static void main(String [] args) {

GameServer server = new GameServer(9000);
new Thread(server).start();

System.out.println("The Server has started.");

}

}


import java.io.*;
import java.net.*;

public class Client {

public static void main(String [] args) throws IOException{

Socket clientSocket = new Socket("localhost", 9000);

BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());

String serverMessage;
String clientMessage;

serverMessage = inFromServer.readLine();
System.out.println(serverMessage);

System.out.print("Enter a number: ");
String num = inFromUser.readLine();

//I need for the client to wait here as well.

System.out.println("ugh");

}

}


import java.net.*;
import java.io.*;
import java.util.*;

public class WorkerRunnable implements Runnable{

public Socket clientSocket = null;
public String serverText = null;

public int number = -1;
public int guessCount = 0;

public WorkerRunnable(Socket clientSocket, String serverText) {

this.clientSocket = clientSocket;
this.serverText = serverText;
this.guessCount = 0;

}

public void run() {

try {

BufferedReader inFromClient = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
OutputStream output = clientSocket.getOutputStream();

Random rand = new Random();
number = rand.nextInt(10);

output.write(("Guess an integer between 0 and 10." + number).getBytes());

//I need for the server to wait here

output.close();


}catch (IOException e) {

System.out.println("Something went wrong.");

}

}

}

最佳答案

你的问题是你正在读行,但你没有写行。您需要在消息中添加行终止符。

这与您的标题或您在问题正文中要求的内容无关,无论如何,它们彼此不一致。读取将阻塞,直到数据到达。在这种情况下,readLine() 将阻塞,直到行终止符或流末尾到达。

关于java - 客户端和服务器如何暂停以等待对方发送下一条消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36379979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com