gpt4 book ai didi

java - 如何让Java服务器读取变量而不是控制台输入?

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:06 25 4
gpt4 key购买 nike

我正在创建一个简单的套接字程序,它可以读取用户输入并将其存储在其变量中。它还允许向服务器发送消息。

客户端输入其详细信息(姓名等),然后输入连接详细信息。我已经创建了发送这些变量的方法,但它们无法正常工作。

下面的预期结果:将客户端类中的 playerName 存储到服务器类中的 playerName 中。实际结果:连接后的第一个输入存储到服务器的 playerName 变量

//服务器客户端类

public static String playerName = "Client";


public static void playerDetails() {
Scanner playerInfo = new Scanner(System.in);

System.out.println("Welcome! Please Enter Your Player Name:");
playerName = playerInfo.nextLine();
}

public void sendNameToServer(String pName) throws IOException {
if (this.clientSocket == null || this.output == null)
throw new SocketException("Socket does not exist");
this.output.writeObject(playerName);
}

public void sendMessageToServer(String msg) throws IOException {
if (this.clientSocket == null || this.output == null)
throw new SocketException("socket does not exist");

this.output.writeObject(msg);
}


public void runClient() {
try {
BufferedReader fromConsole = new BufferedReader(new InputStreamReader(System.in));
String message = null;

while (true) {
message = fromConsole.readLine();
handleUserInput(message);
if(message.equals("over"))

break;
}



// server client Manager Class

try {
this.out = new ObjectOutputStream(this.clientSocket.getOutputStream());
this.in = new ObjectInputStream(this.clientSocket.getInputStream());
}



String pName = null;
String msg = "";

//Name

pName = (String)this.in.readObject();
this.server.sendNameToServer(pName, this);



msg = (String)this.in.readObject();
this.server.handleMessagesFromClient(msg, this);


//Abstract Methods
public abstract class ServerAbstractComponents {
public abstract void handleMessagesFromClient(String msg, ServerClientManager clientmgr);
public abstract void sendMessageToClient(String msg, ServerClientManager clientmgr);
public abstract void sendNameToServer(String pName, ServerClientManager clientmgr);

//Server Class
public String playerName;
public synchronized void sendNameToServer(String pName, ServerClientManager client) {
playerName = pName;
}


public synchronized void handleMessagesFromClient(String msg, ServerClientManager client) {

// format the client message before displaying in server's terminal output.
String formattedMessage = String.format("[client %d] : %s", client.getClientID(), msg);

if(msg.equals(new String("test"))) {
System.out.println("your name is:" + playerName);
} else

display(formattedMessage);
}

Client

Server

最佳答案

这是我的做法。

//Writes player Name as an object to the output Stream
System.out.println("Welcome, Enter your name :");
try {
Scanner playerInfo = new Scanner(System.in);
playerName2 = playerInfo.nextLine();
this.output.writeObject(playerName2);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} System.out.println("Welcome to The Game! " + playerName2);

//ServerClientManager类

            //Name2
try {
pName2 = (String)this.in.readObject();
} catch (ClassNotFoundException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
this.server.sendNameToServer2(pName2, this);

//抽象类

public abstract void sendNameToServer(String pName2, ServerClientManager clientmgr);

//服务器类

public String playerName2;
public synchronized void sendNameToServer2(String pName2, ServerClientManager client) {
client.playerName2 = pName2;
}

关于java - 如何让Java服务器读取变量而不是控制台输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59556677/

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