Skip to content

Commit 4e6a41d

Browse files
authored
as my beloved sons I warn you
Being defamed, we entreat: we are made as the filth of the world, and are the trash of all things unto this day. (1Cor 4:13) I write not these things to shame you, but as my beloved sons I warn you. (1Cor 4:14)
1 parent 633469c commit 4e6a41d

1 file changed

Lines changed: 91 additions & 0 deletions

File tree

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
2+
//I write not these things to shame you, but as my beloved sons I warn you. (1Cor 4:14)
3+
4+
package com.javarush.task.task30.task3008;
5+
6+
import java.io.*;
7+
import java.net.ServerSocket;
8+
import java.net.Socket;
9+
10+
public class Server {
11+
public static void main(String[] args) {
12+
ConsoleHelper.writeMessage("Please, input server port: ");
13+
try (ServerSocket serverSocket = new ServerSocket(ConsoleHelper.readInt())) {
14+
ConsoleHelper.writeMessage("Server starting...");
15+
while (true) {
16+
new Handler(serverSocket.accept()).start();
17+
}
18+
} catch (Exception e) {
19+
ConsoleHelper.writeMessage("Error, server socket was closed.");
20+
}
21+
}
22+
23+
private static class Handler extends Thread {
24+
private Socket socket;
25+
26+
public Handler(Socket socket) {
27+
this.socket = socket;
28+
}
29+
}
30+
}
31+
32+
/*
33+
Чат (6)
34+
Приступим к самому важному – написанию класса Server. Сервер должен поддерживать
35+
36+
множество соединений с разными клиентами одновременно. Это можно реализовать с
37+
38+
помощью следующего алгоритма:
39+
40+
- Сервер создает серверное сокетное соединение.
41+
42+
- В цикле ожидает, когда какой-то клиент подключится к сокету.
43+
44+
- Создает новый поток обработчик Handler, в котором будет происходить обмен
45+
46+
сообщениями с клиентом.
47+
48+
- Ожидает следующее соединение.
49+
50+
Добавь:
51+
52+
1) В класс Server приватный статический вложенный класс Handler, унаследованный от
53+
54+
Thread.
55+
56+
2) В класс Handler поле socket типа Socket.
57+
58+
3) В класс Handler конструктор, принимающий в качестве параметра Socket и
59+
60+
инициализирующий им соответствующее поле класса.
61+
62+
4) Метод main класса Server, должен:
63+
64+
а) Запрашивать порт сервера, используя ConsoleHelper.
65+
66+
б) Создавать серверный сокет java.net.ServerSocket, используя порт из предыдущего пункта.
67+
68+
в) Выводить сообщение, что сервер запущен.
69+
70+
г) В бесконечном цикле слушать и принимать входящие сокетные соединения только что созданного
71+
72+
серверного сокета.
73+
74+
д) Создавать и запускать новый поток Handler, передавая в конструктор сокет из предыдущего пункта.
75+
76+
е) После создания потока обработчика Handler переходить на новый шаг цикла.
77+
78+
ж) Предусмотреть закрытие серверного сокета в случае возникновения исключения.
79+
80+
з) Если исключение Exception все же произошло, поймать его и вывести сообщение
81+
82+
об ошибке.
83+
84+
85+
Требования:
86+
1. В классе Server должен быть создан приватный статический класс Handler, унаследованный от класса Thread.
87+
2. В классе Handler должно быть создано поле socket типа Socket.
88+
3. Конструктор класса Handler должен принимать один параметр типа Socket и инициализировать поле socket.
89+
4. Метод main должен считывать с клавиатуры порт сервера используя метод readInt класса ConsoleHelper.
90+
5. Метод main должен корректно реализовывать бесконечный цикл описанный в условии задачи.
91+
*/

0 commit comments

Comments
 (0)