|
9 | 9 | public class SocketServerRunner {
|
10 | 10 | public static void main(String[] args) throws IOException {
|
11 | 11 | /*
|
12 |
| - 1. IP адрес машины на который развернут наш сервер |
13 |
| - и будет адресом сервера (в нашем случай мы обратимся |
14 |
| - с нашего клиента, сами к себе, поэтому это будет |
15 |
| - 127.0.0.1), если же мы будем обращаться с другой |
16 |
| - (или) к другой машине то в настройках создаваемого |
17 |
| - Socket - а клиента кроме TCP порта нужно указывать |
18 |
| - IP сервера. В случае TCPSockets.SocketServer - а достаточно TCP |
19 |
| - порта (у нас это 7777) |
| 12 | + 1. IP адрес машины на который развернут наш сервер и будет адресом сервера (в нашем случай мы обратимся с нашего клиента, сами к себе, |
| 13 | + поэтому это будет 127.0.0.1), если же мы будем обращаться с другой (или) к другой машине то в настройках создаваемого Socket - а клиента |
| 14 | + кроме TCP порта нужно указывать IP сервера. В случае TCPSockets.SocketServer - а достаточно TCP порта (у нас это 7777) |
20 | 15 | */
|
| 16 | + |
21 | 17 | ServerSocket myServerSocket = new ServerSocket(7777);
|
| 18 | + |
22 | 19 | /*
|
23 |
| - 2. Наш ServerSocket принимает потоки ввода-вывода, как и |
24 |
| - обычный Socket. Чтобы наш сервер принял данные, мы применяем |
25 |
| - его блокирующий метод *.accept(), т.е. программа будет ждать |
26 |
| - пока на данный открытый Socket не придет какое-либо |
27 |
| - сообщение из вне. |
| 20 | + 2. Наш ServerSocket принимает потоки ввода-вывода, как и обычный Socket. Чтобы наш сервер принял данные, мы применяем его блокирующий метод |
| 21 | + *.accept(), т.е. программа будет ждать пока на данный открытый Socket не придет какое-либо сообщение из вне. |
28 | 22 |
|
29 |
| - !!! |
30 |
| - Это означает, что наш сервер не может принять, более |
31 |
| - чем одно соединение, и для того, чтобы это было возможно |
32 |
| - организуется многопоточность. |
33 |
| - !!! |
| 23 | + !!! Это означает, что наш сервер не может принять, более чем одно соединение, и для того, чтобы это было возможно организуется многопоточность !!! |
34 | 24 | */
|
| 25 | + |
35 | 26 | Socket myOuterConnectionSocket = myServerSocket.accept();
|
36 |
| - /* |
37 |
| - 3. Как и в случае с обычным Socket клиентом нас сервер |
38 |
| - тоже что-то принимает и что-то отправляет, а значит нам |
39 |
| - нужны входящие и исходящие потоки. |
40 |
| - */ |
| 27 | + |
| 28 | + /* 3. Как и в случае с обычным Socket клиентом нас сервер тоже что-то принимает и что-то отправляет, а значит нам нужны входящие и исходящие потоки. */ |
| 29 | + |
41 | 30 | DataOutputStream serverOutputStream =
|
42 | 31 | new DataOutputStream(myOuterConnectionSocket.getOutputStream());
|
43 | 32 | DataInputStream serverInputStream =
|
44 | 33 | new DataInputStream(myOuterConnectionSocket.getInputStream());
|
| 34 | + |
45 | 35 | /*
|
46 |
| - 4. Выведем на экран сообщение от нашего клиента или |
47 |
| - запрос - request (полученные через InputStream). И |
48 |
| - пошлем нашему клиенту сообщение от сервера или ответ |
49 |
| - - response (отправленные через OutputStream). |
| 36 | + 4. Выведем на экран сообщение от нашего клиента или запрос - request (полученные через InputStream). И пошлем нашему клиенту сообщение от сервера или |
| 37 | + ответ - response (отправленные через OutputStream). |
50 | 38 | */
|
| 39 | + |
51 | 40 | System.out.println("Client request: " + serverInputStream.readUTF());
|
52 | 41 | serverOutputStream.writeUTF("Hello from server!!!");
|
53 | 42 |
|
54 |
| - /* |
55 |
| - 5. Закрываем все потоки и каналы принудительно. В данном |
56 |
| - примере мы не использовали try-with-resources, как в |
57 |
| - Socket - клиенте. |
58 |
| - */ |
| 43 | + /* 5. Закрываем все потоки и каналы принудительно. В данном примере мы не использовали try-with-resources, как в Socket - клиенте. */ |
| 44 | + |
59 | 45 | myServerSocket.close();
|
60 | 46 | myOuterConnectionSocket.close();
|
61 | 47 | serverOutputStream.close();
|
62 | 48 | serverInputStream.close();
|
| 49 | + |
63 | 50 | /*
|
64 |
| - 6. Для проверки работоспособности нашего клиент-серверного |
65 |
| - соединения, мы первым запускаем наш сервер, который ожидает |
66 |
| - внешнего запроса. |
| 51 | + 6. Для проверки работоспособности нашего клиент-серверного соединения, мы первым запускаем наш сервер, который ожидает внешнего запроса. |
67 | 52 |
|
68 |
| - Далее, мы запускаем наш клиент, который шлет нашему серверу |
69 |
| - сообщение: Hello my first SERVER!!! |
| 53 | + Далее, мы запускаем наш клиент, который шлет нашему серверу сообщение: Hello my first SERVER!!! |
70 | 54 |
|
71 |
| - Сервер в свою очередь получив сообщение из вне отправляет |
72 |
| - ответ: Hello from server!!! |
| 55 | + Сервер в свою очередь получив сообщение из вне отправляет ответ: Hello from server!!! |
73 | 56 |
|
74 | 57 | Таким образом работает протокол HTTP:
|
75 | 58 | 1. Open Connection
|
76 | 59 | 2. Send Request
|
77 | 60 | 3. Receive Response
|
78 | 61 | 4. Close Connection
|
79 | 62 | */
|
80 |
| - |
81 | 63 | }
|
82 | 64 | }
|
0 commit comments