Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: А.В. Фролов, Г.В. Фролов - Microsoft Visual J++
<<-[Весь Текст]
Страница: из 275
 <<-
 
кое приложение выводит на свою консоль приглашение для ввода строк.
 Введенные строки отображаются на консоли и передаются серверному приложению. 
Сервер, получив строку, отображает ее в своем окне и посылает обратно клиенту. 
Клиент выводит полученную от сервера строку на консоли. 
   Когда пользователь вводит строку “quit”, цикл ввода и передачи строк 
завершается.
   Весь процесс показан на рис. 3.3.

Рис. 3.3. Передача данных между приложениями SocketClient и SocketServ через 
потоковый сокет
   Здесь в окне клиентского приложения мы ввели несколько строк, причем 
последняя строка была строкой “quit”, завершившая работу приложений.
   Исходный текст серверного приложения SocketServ
   Исходный текст серверного приложения SocketServ приведен в листинге 3.5.
Листинг 3.5. Файл SocketServ\SocketServ.java
// =========================================================
// Использование потоковых сокетов.
// Приложение сервера
//
// (C) Фролов А.В, 1997
//
// E-mail: [email protected]
// WWW:    http://www.glasnet.ru/~frolov
//            или
//         http://www.dials.ccas.ru/frolov
// =========================================================
import java.io.*;
import java.net.*;
import java.util.*;

public class SocketServ
{
  // -------------------------------------------------------
  // main
  // Метод, получающий управление при запуске приложения
  // -------------------------------------------------------
  public static void main(String args[])
  {
    // Массив для ввода строки с клавиатуры
    byte bKbdInput[] = new byte[256];

    // Объект класса ServerSocket для создания канала
    ServerSocket ss;

    // Сокет сервера
    Socket s;

    // Входной поток для приема команд от клиента
    InputStream is;

    // Выходной поток для передачи ответа клиенту
    OutputStream os;

    try
    {
      System.out.println("Socket Server Application");
    }
    catch(Exception ioe)
    {
      // При возникновении исключения выводим его описание
      // на консоль
      System.out.println(ioe.toString());
    }
    
    try
    {
      // Создаем объект класса ServerSocket
      ss = new ServerSocket(9999);

      // Ожидаем соединение
      s = ss.accept();

      // Открываем входной поток для приема 
      // команд от клиента
      is = s.getInputStream();

      // Открываем выходной поток для передачи 
      // ответа клиенту
      os = s.getOutputStream();

      // Буфер для чтения команд
      byte buf[] = new byte[512];

      // Размер принятого блока данных
      int lenght;

      // Цикл обработки команд, полученных от клиента
      while(true)
      {
        // Получаем команду
        lenght = is.read(buf);

        // Если входной поток исчерпан, завершаем
        // цикл обработки команд
        if(lenght == -1)
          break;

        // Отображаем принятую команду на консоли сервера

        // Формируем строку из принятого блока
        String str = new String(buf, 0);

        // Обрезаем строку, удаляя символ конца строки
        StringTokenizer st;
        st   = new StringTokenizer(str, "\r\n");
        str = new String((String)st.nextElement());

        // Выводим строку команды на консоль
        System.out.println(">  " + str);

        // Посылаем принятую команду обратно клиенту
        os.write(buf, 0, lenght);

        // Сбрасываем буфер выходного потока
        os.flush();
      }

      // 
 
<<-[Весь Текст]
Страница: из 275
 <<-