Я пытаюсь сделать клиент-серверное соединение. Сначала я выполнил код сервера в одной консоли, а затем клиентский код в другой консоли. Я хочу, чтобы после того, как клиентский код запускается, клиент вводит свое имя, а затем создам объект класса сокета клиента и печатаю имя клиента в консоли сервера. Но на консоли сервера он печатает 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) {}
}
Спасибо, я понял. – a874