Microsoft Visual J++. Создание приложений и аплетов на языке Java


Исходный текст серверного приложения SocketServ


Исходный текст серверного приложения SocketServ приведен в листинге3.5.

Листинг 3.5. Файл SocketServ\SocketServ.java

// =========================================================

// Использование потоковых сокетов.

// Приложение сервера

//

// (C) Фролов А.В, 1997

//

// E-mail: frolov@glas.apc.org

// 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();

      }

      // Закрываем входной и выходной потоки

      is.close();

      os.close();

      // Закрываем сокет сервера

      s.close();

      // Закрываем соединение

      ss.close();

    }

    catch(Exception ioe)

    {

      System.out.println(ioe.toString());

    }

   

    try

    {

      System.out.println(

        "Press <Enter> to terminate application...");

      System.in.read(bKbdInput);

    }

    catch(Exception ioe)

    {

      System.out.println(ioe.toString());

    }

  }

}


Содержание раздела