Найти в Дзене
Всё и обо всём!

Java приложение клиент - сервер.

Java приложение клиент - сервер. Приложения состоят из двух частей: Клиента и Сервера. Соединение может быть установлено двумя способами: Для работы с сетью в Java предусмотрена иерархия пакетов  java.net.* Для адресации сервера в сети могут использоваться IP-адреса или доменные имена. Преобразование между ними происходит с помощью класса InetAddress: Для работы на локальном компьютере можно использовать IP-адрес 127.0.0.1 или имя “localhost”. В процессе установления соединения и обмена данными необходимо перехватывать исключения: Создадим сервер: import java.io.*; import java.net.*; public class Server { public static void main(String[] args) throws IOException { System.out.println("Старт сервера"); // поток для чтения данных BufferedReader in = null; // поток для отправки данных PrintWriter out= null; // серверный сокет ServerSocket server = null; // сокет для обслуживания клиента Socket client = null; // создаем серверный сокет try {
Оглавление

Java приложение клиент - сервер.

Приложения состоят из двух частей: Клиента и Сервера.

  1. Сервер запускается первым и после некоторых настроек переходит в состояние ожидания, используя определенный порт.
  2. Клиент устанавливает соединение, используя IP-адрес компьютера и порт, который прослушивает сервер.
  3. Общение двух программ выполняется через потоки ввода/вывода.
  4. После обмена информацией клиент разрывает соединение.

Соединение может быть установлено двумя способами:

  1. С помощью потоков (TCP)
  2. С помощью датаграмм (UDP)

Для работы с сетью в Java предусмотрена иерархия пакетов 

java.net.*

Для адресации сервера в сети могут использоваться IP-адреса или доменные имена.

Преобразование между ними происходит с помощью класса InetAddress:

Для работы на локальном компьютере можно использовать IP-адрес 127.0.0.1 или имя “localhost”.

В процессе установления соединения и обмена данными необходимо перехватывать исключения:

  • IOException - при создании серверного сокета (порт занят). При обработке пользовательского запроса (подключение к порту). При получении потока ввода/вывода. При чтении/записи сообщения из/в поток(а).
  • UnknownHostException - при соединении на стороне клиента (хост не найден).
  • NoRouteToHostException - сервер недоступен.
  • ConnectException - запрос на соединение отклонен.

Создадим сервер:

import java.io.*;

import java.net.*;

public class Server

{

public static void main(String[] args) throws IOException {

System.out.println("Старт сервера");

// поток для чтения данных

BufferedReader in = null;

// поток для отправки данных

PrintWriter out= null;

// серверный сокет

ServerSocket server = null;

// сокет для обслуживания клиента

Socket client = null;

// создаем серверный сокет

try {

server = new ServerSocket(1234);

} catch (IOException e) {

System.out.println("Ошибка связывания с портом 1234");

System.exit(-1);

}

..

try {

System.out.print("Ждем соединения");

client= server.accept();

System.out.println("Клиент подключился");

} catch (IOException e) {

System.out.println("Не могу установить соединение");

System.exit(-1);

}

// создаем потоки для связи с клиентом

in = new BufferedReader(

new InputStreamReader(client.getInputStream()));

out = new PrintWriter(client.getOutputStream(),true);

String input,output;

// цикл ожидания сообщений от клиента

System.out.println("Ожидаем сообщений");

while ((input = in.readLine()) != null) {

if (input.equalsIgnoreCase("exit"))

break;

out.println("Сервер: "+input);

System.out.println(input);

}

out.close();

in.close();

client.close();

server.close();

}

}

Создаем клиент:

import java.io.*;

import java.net.*;

public class Client {

public static void main(String[] args) throws IOException {

System.out.println("Клиент стартовал");

Socket server = null;

// адрес (имя) сервера должны передаваться как параметр

if (args.length==0) {

System.out.println("Использование: java Client hostname");

System.exit(-1);

}

System.out.println("Соединяемся с сервером "+args[0]);

server = new Socket(args[0],1234);

BufferedReader in = new BufferedReader(

new InputStreamReader(server.getInputStream()));

PrintWriter out =

new PrintWriter(server.getOutputStream(),true);

BufferedReader inu =

new BufferedReader(new InputStreamReader(System.in));

String fuser,fserver;

while ((fuser = inu.readLine())!=null) {

out.println(fuser);

fserver = in.readLine();

System.out.println(fserver);

if (fuser.equalsIgnoreCase("close"))

break;

if (fuser.equalsIgnoreCase("exit"))

break;

}

out.close();

in.close();

inu.close();

server.close();

}

}

Запуск сервера:

java Server

Запуск клиента (для сервера на локальной машине):

java Client localhost