Назад к вопросам
Junior
74
questionbank
Что такое сокет?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Сокет (socket) — это абстракция конечной точки двунаправленного сетевого взаимодействия между двумя программами через сеть.
В контексте сетевого программирования, сокет представляет собой программный объект, который:
- Идентифицируется парой IP-адрес + порт.
- Является интерфейсом для отправки и приема данных.
- Предоставляет способ для процессов обмениваться информацией, независимо от того, находятся ли они на одной или разных машинах.
Существуют два основных типа сокетов в зависимости от используемого протокола транспортного уровня:
- TCP-сокеты (потоковые):
- Используют протокол TCP.
- Обеспечивают надежную, ориентированную на соединение потоковую передачу данных.
- Гарантируют доставку данных, сохранение порядка и отсутствие дубликатов.
- Используются для протоколов, требующих надежной передачи (HTTP, FTP, SSH).
- UDP-сокеты (дейтаграммные):
- Используют протокол UDP.
- Представляют собой ненадежную, безсоединительную передачу данных в виде дейтаграмм.
- Не гарантируют доставку, порядок или отсутствие дубликатов.
- Используются для протоколов, где важна скорость, а не надежность (DNS, потоковое видео/аудио).
В Java сокетное программирование реализуется при помощи классов из пакета java.net:
Socketдля клиентских TCP-сокетов.ServerSocketдля серверных TCP-сокетов.DatagramSocketдля UDP-сокетов.DatagramPacketдля дейтаграмм UDP.
Пример простого TCP-клиента:
import java.net.Socket;
import java.io.OutputStream;
// Класс TCP-клиента
public class SimpleTcpClient {
// Метод для создания и использования сокета
public static void main(String[] args) {
try {
// Создание клиентского сокета, подключение к серверу на localhost:12345
Socket socket = new Socket("localhost", 12345);
System.out.println("Connected to server.");
// Получение выходного потока для отправки данных
OutputStream outputStream = socket.getOutputStream();
String message = "Hello from client!";
outputStream.write(message.getBytes()); // Отправка данных
// Закрытие сокета
socket.close();
System.out.println("Socket closed.");
} catch (Exception e) {
e.printStackTrace();
}
}
}