gpt4 book ai didi

java - 为什么下面的代码会打印null?

转载 作者:行者123 更新时间:2023-12-02 03:41:15 25 4
gpt4 key购买 nike

我正在尝试建立客户端-服务器连接。首先,我在一个控制台中执行服务器代码,然后在另一个控制台中执行客户端代码。我希望在客户端代码运行后,客户端输入他的名字,然后我将创建客户端套接字类的对象并在服务器控制台中打印客户端的名称。但在服务器控制台上,当我尝试打印客户端名称时,它会打印 null

由于服务器类的 accept() 方法等待客户端套接字对象,因此在这行之前 System.out.println(Myclient1.nameOfClient + "connected"); 被执行时,客户端已经在 String nameOfClient 中输入了他的名字。

我无法理解这背后的原因。

服务器代码

public Myserver1() {
try {
ss = new ServerSocket(10);
while (true) {
s = ss.accept(); // waits for the client socket
System.out.println(Myclient1.nameOfClient + " connected"); // Here I want to print the name of client(Myclient1.java).

al.add(s);
Runnable r = new MyThread(s, al);
Thread t = new Thread(r);
t.start();
}
} catch(Exception e) {}
}

客户端代码

public Myclient1() {
System.out.println("enter ur name");
nameOfClient = new Scanner(System.in).nextLine(); // Here I am storing the name of client so that I can access nameOfClient from Myserver1.java

try {

s = new Socket("localhost", 10);

din = new DataInputStream(s.getInputStream());
dout = new DataOutputStream(s.getOutputStream());
clientchat();
} catch(Exception e) {}
}

最佳答案

服务器和客户端应该彼此独立运行,否则就违背了网络的目的。现在,您正在访问一个从未初始化的静态变量,因为客户端没有与服务器在同一进程中运行。通过套接字发送名称,并将其用作您的打印,您的问题将得到解决。

关于java - 为什么下面的代码会打印null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36813065/

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