Socket и ServerSocket. Socket – клиентское подключение. Отправляет запросы и получает ответы с заданного порта/адреса по TCP/IP-соединению. Наследники могут реализовывать протоколы более высокого уровня сетевого стека, например SSLSocket. Похож на утилиту netcat из Unix-систем. Обслуживает одно подключение к серверу, обменивается данными через InputStream и OutputStream.ServerSocket – сервер, приёмник подключений. Занимает на машине заданный свободный порт, и в одиночку принимает все подключения к нему. Опционально можно задать свой адрес, если текущая машина доступна по нескольким, а сокет должен быть доступен только по одному из них.Ключевой метод серверного сокета –
accept(). Вызов этого метода блокирует исполнение до тех пор, пока не придет новый запрос от клиента. Возвращает пришедший запрос в виде экземпляра класса Socket. Чтобы сделать сервер параллельным, accept() должен вызываться в параллельных потоках.Стандартную внутреннюю реализацию сокетов можно подменить, установив для них статическую фабрику типа
SocketImplFactory, методом setSocketFactory().Для высокоуровневых (HTTP, FTP) запросов в стандартной библиотеке есть класс
URLConnection и его наследники.Полный пример клиент-серверного приложения доступен в туториале на сайте Oracle.