gpt4 book ai didi

Java 服务器猜谜游戏 - 多客户端问题

转载 作者:行者123 更新时间:2023-12-01 14:59:01 26 4
gpt4 key购买 nike

这是我的猜谜游戏遇到的问题。本质上我想做的是拥有一台服务器并让许多客户端连接到它。目前,这已完成,我可以将客户端连接到服务器来玩游戏,猜数字游戏。问题是我希望每个客户都能玩这个游戏。目前游戏正在服务器本身上进行。因此,尽管可以有多个客户端加入,但每次有客户端加入时,游戏都会重新开始。当输入正确答案时,服务器会给客户端评分。需要明确的是,我正在运行服务器类,然后我正在运行客户端类。我希望能够在客户端类窗口而不是服务器窗口上玩游戏。这是我的代码,您可以告诉我该怎么做吗?猜谜游戏源自java sun knock knock教程。在这里找到http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html谢谢。

客户端类

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

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

Socket kkSocket = null;
PrintWriter out = null;
BufferedReader in = null;

try {
kkSocket = new Socket("127.0.0.1", 4444);
out = new PrintWriter(kkSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host: taranis.");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to: taranis.");
System.exit(1);
}

BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String fromServer;
String fromUser;

while ((fromServer = in.readLine()) != null) {
System.out.println("Server: " + fromServer);
if (fromServer.equals("Bye."))
break;

fromUser = stdIn.readLine();
if (fromUser != null) {
System.out.println("Client: " + fromUser);
out.println(fromUser);
}
}

out.close();
in.close();
stdIn.close();
kkSocket.close();
}
}

服务器类

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

public class GServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
boolean listening = true;

try {
serverSocket = new ServerSocket(4444);
} catch (IOException e) {
System.err.println("Could not listen on port: 4444.");
System.exit(-1);
}
System.err.println("Started KK server listening on port 4040");
while (listening)
new GThread(serverSocket.accept()).start();

serverSocket.close();
}
}

协议(protocol)类

import java.util.*;


public class GProtocol {
int guess = 0, number = new Random().nextInt(100) + 1;
int score = 10;
int guessmade = 0;
boolean gameRunning = true;
Scanner scan = new Scanner(System.in);


public String processInput(String theInput) {
String theOutput = null;


String ID;
System.out.println("Please Enter your ID...");
ID = scan.next( );

System.out.println("Please guess the number between 1 and 100. You have 10 guesses. Your score is however many guesses you have left");

while (guess != number)
{

try {


if ((guess = Integer.parseInt(scan.nextLine())) != number) {

System.out.println(guess < number ? "Higher..." : "Lower...");
score = score - 1; // here the score variable has one value taken away form it each time the user misses a guess
guessmade = +1; // here the guess made variable is given +1 variable
}
else {
System.out.println("Correct!");


}

}



catch (NumberFormatException e) {
System.out.println("Please enter valid numbers! '");

}






}


theOutput = ID + " your score is " + score ; // here the score is returned

return theOutput;}}

线程类

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

public class GThread extends Thread {
private Socket socket = null;

public GThread(Socket socket) {
super("GMultiServerThread");
this.socket = socket;
}

public void run() {

try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));

String inputLine, outputLine;
GProtocol kkp = new GProtocol();
outputLine = kkp.processInput(null);
out.println(outputLine);

while ((inputLine = in.readLine()) != null) {
outputLine = kkp.processInput(inputLine);
out.println(outputLine);
if (outputLine.equals("Bye"))
break;
}
out.close();
in.close();
socket.close();

} catch (IOException e) {
e.printStackTrace();
}
}
}

最佳答案

在 Protocol 类中,您将消息写入 System.outProtocol 类的实例在服务器的环境中执行,因此输出被打印到服务器的输出中。要在客户端控制台中显示输出,您必须通过套接字将消息发送到客户端并在那里打印。

关于Java 服务器猜谜游戏 - 多客户端问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13955812/

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