На этом шаге мы приведем первый пример использования класса ServerSocket
Наша программа будет ждать подключение клиента. Она получит сообщение от клиента и переотправит это сообщение, после чего закончит свою работу.
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { // try с ресурсами, чтобы корректно закрыть потом сокет try (ServerSocket socket = new ServerSocket(Constants.PORT)) { System.out.println("Server started"); // Ждем подключения клиента Socket client = socket.accept(); System.out.println("Client connected"); // После подключения получаем необходимые потоки DataInputStream inputStream = new DataInputStream(client.getInputStream()); DataOutputStream outputStream = new DataOutputStream(client.getOutputStream()); // Получаем сообщение String text = inputStream.readUTF(); System.out.println("Client sending: " + text); // Переотправляем полученное сообщение outputStream.writeUTF(text); outputStream.flush(); // Обязательно закрываем потоки inputStream.close(); outputStream.close(); // И Обязательно закрываем клиентский сокет client.close(); System.out.println("Server shutdown"); } } }
Проект можно взять здесь
Рис. 1. Вывод программы
На следующем шаге мы рассмотрим способ одновременной обработки нескольких соединений