Ваши модификации почти сработали - ниже - работающая версия с незначительными изменениями в вашем коде.
Частью ваших изменений вы непреднамеренно удалили цикл while в функции run, что означает, что функция Date () фактически вызывается только один раз. Чтобы увидеть это, удалите цикл while из run (), и после того, как Дата напечатана (в окне telnet), появится сообщение «Выполнено с помощью функции run». печатается.
Я добавил идентификатор для каждого клиента, который печатается с датой. Статическое поле класса cnt гарантирует, что у каждого клиента свой идентификатор.
Я запустил отдельные клиенты в отдельных терминалах командной строки, используя
telnet localhost 8818
так, чтобы они работали одновременно. Внизу вывод от 3-го клиента.
Я переключил код на соглашение camelCase (переменные начинаются со строчной буквы и пишутся с заглавной буквы для каждого нового слова), поскольку все CAPS обычно зарезервированы для констант, и это изменение облегчило чтение кода для меня.
public class Server
{
private ServerSocket server;
private int port;
private Socket client;
public Server()
{
port = 8818;
try
{
server = new ServerSocket(port);
System.out.println("Server started on port: " + port);
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
public void on() throws IOException
{
while(true)
{
client = server.accept();
new ClientHandler(client).start();
}
}
}
public class ClientHandler extends Thread {
private Socket client;
private OutputStream out;
private int id;
private static int cnt=0;
public ClientHandler(Socket client) {
System.out.println("Accepted Connection from: " + client.getInetAddress());
this.client = client;
id=cnt;
cnt++;
}
public void run() {
try {
out = client.getOutputStream();
while (true) {
out.write(("Client " + id + ": Time now is: " + new Date() + "\n").getBytes());
sleep(1000);
}
} catch (Exception e) {
System.out.println(client.getInetAddress() + " has left the session");
try {
out.close();
client.close();
} catch (IOException j) {
System.out.println("Unexpected Error");
System.exit(-1);
}
}
System.out.println("Done with the run function.");
}
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Server s = new Server();
s.on();
}
}
