为什么以下代码打印为null?

时间:2016-04-23 15:58:14

标签: java sockets

我正在尝试建立客户端 - 服务器连接。首先,我在一个控制台中执行了服务器代码,然后在另一个控我想在客户端代码运行后,客户端输入他的名字,然后我将创建客户端套接字类的对象,并在服务器控制台中打印客户端的名称。但是在服务器控制台上,当我尝试打印客户端名称时,它会打印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) {} 
}

1 个答案:

答案 0 :(得分:2)

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