На этом шаге мы приведем второй пример сервера
По аналогии с клиентом, усовершенствуем серверную часть. Текст программы представлен ниже.
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()); // После подключения чиатем сообщения while (true) { // Получаем сообщение String text = inputStream.readUTF(); System.out.println("Client sending: " + text); // Переотправляем полученное сообщение outputStream.writeUTF(text); outputStream.flush(); // Если ввели END_OF_WORK прекращаем работу if (Constants.END_OF_WORK.equals(text)) { break; } } // Обязательно закрываем потоки inputStream.close(); outputStream.close(); // И обязательно закрываем клиентский сокет client.close(); System.out.println("Server shutdown"); } } }
Проект можно взять здесь
Рис. 1. Вывод программы
На следующем шаге мы рассмотрим способ одновременной обработки нескольких соединений