|
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