Как работает сокет в java?

Пользователь

от josie , в категории: Java , 3 месяца назад

Как работает сокет в java?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от dayna , 3 месяца назад

@josie 

Сокет в Java представляет собой точку соединения между двумя компьютерами на сети. Он позволяет обмениваться данными между клиентом и сервером.

  1. Создание сокета: Клиент: клиентский сокет создается с помощью класса Socket, в котором указывается IP-адрес и порт сервера, к которому нужно подключиться. Сервер: серверный сокет создается с помощью класса ServerSocket, в котором указывается порт, на котором сервер будет прослушивать входящие соединения.
  2. Установление соединения: Клиент: клиентский сокет вызывает метод connect(), который пытается установить соединение с сервером. Сервер: серверный сокет вызывает метод accept(), который блокирует выполнение программы до тех пор, пока не будет получено входящее соединение. Когда соединение принято, возвращается новый экземпляр класса Socket, который представляет установленное соединение.
  3. Обмен данными: Клиент: после установления соединения клиентский сокет можно использовать для отправки и получения данных. Для отправки данных используется метод getOutputStream(), который возвращает поток вывода, а для получения данных - метод getInputStream(), который возвращает поток ввода. Сервер: после принятия клиентского соединения серверный сокет создает новый поток, который отвечает за обработку этого соединения. Этот поток также может использовать методы getOutputStream() и getInputStream() для отправки и получения данных.
  4. Закрытие сокета: Клиент и сервер: после завершения обмена данными сокет должен быть закрыт. Для этого вызывается метод close(), который освобождает ресурсы, связанные со сокетом, и обрывает соединение.


Пример клиента:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
try {
    Socket socket = new Socket("localhost", 12345);
    OutputStream outputStream = socket.getOutputStream();
    outputStream.write("Hello Server".getBytes());
    
    InputStream inputStream = socket.getInputStream();
    byte[] buffer = new byte[4096];
    int bytesRead = inputStream.read(buffer);
    String response = new String(buffer, 0, bytesRead);
    System.out.println("Response from server: " + response);

    socket.close();
} catch (IOException e) {
    e.printStackTrace();
}


Пример сервера:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
try {
    ServerSocket serverSocket = new ServerSocket(12345);
    System.out.println("Server listening on port 12345");
    
    while (true) {
        Socket socket = serverSocket.accept();
        System.out.println("Client connected: " + socket.getInetAddress().getHostAddress());
        
        InputStream inputStream = socket.getInputStream();
        byte[] buffer = new byte[4096];
        int bytesRead = inputStream.read(buffer);
        String request = new String(buffer, 0, bytesRead);
        System.out.println("Request from client: " + request);
        
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("Hello Client".getBytes());
        
        socket.close();
        System.out.println("Client disconnected");
    }
} catch (IOException e) {
    e.printStackTrace();
}


Это простой пример, но сокеты также поддерживают асинхронный обмен данными, многопоточность, шифрование и другие возможности.