首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么下面的代码打印为空?

为什么下面的代码打印为空?
EN

Stack Overflow用户
提问于 2016-04-23 15:58:13
回答 1查看 75关注 0票数 0

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

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

我不明白背后的原因。

服务器代码

代码语言:javascript
复制
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) {}
}

客户端代码

代码语言:javascript
复制
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) {} 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-23 16:03:41

服务器和客户端应该独立运行,否则就会破坏联网的目的。现在,您正在访问一个静态变量,因为客户端没有运行在与server.Send相同的进程(套接字上的名称)中,所以它从未被初始化过,并且使用它作为打印和解决问题的方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36813065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档