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

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


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

Листинг 3.6. Файл SocketClient\SocketClient.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 SocketClient

{

  // -------------------------------------------------------

  // main

  // Метод, получающий управление при запуске приложения

  // -------------------------------------------------------

  public static void main(String args[])

  {

    // Массив для ввода строки с клавиатуры

    byte bKbdInput[] = new byte[256];

    // Сокет для связи с сервером

    Socket s;

    // Входной поток для приема данных от сервера

    InputStream is;

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

    OutputStream os;

    try

    {

      // Выводим строку приглашения

      System.out.println("Socket Client Application" +

        "\nEnter any string or 'quit' to exit...");

    }

    catch(Exception ioe)

    {

      // При возникновении исключения выводим его описание

      // на консоль

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

    }

   

    try

    {

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

      s = new Socket("localhost",9999);

      // Создаем входной поток для приема данных от сервера

      is = s.getInputStream();

      // Создаем выходной поток для передачи данных серверу

      os = s.getOutputStream();

      // Буфер для передачи данных

      byte buf[] = new byte[512];

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

      int length;

      // Рабочая строка

      String str;

      // Вводим команды и передаем их серверу


      while(true)

      {

        // Читаем строку команды с клавиатуры

        length = System.in.read(bKbdInput);

       

        // Если строка не пустая, обрабатываем ее

        if(length != 1)

        {

          // Преобразуем строку в формат String

          str = new String(bKbdInput, 0);

          // Обрезаем строку, удаляя символ конца строки

          StringTokenizer st;

          st   = new StringTokenizer(str, "\n");

          str = new String((String)st.nextElement());

          // Выводим передаваемую строку команды

          // на консоль для контроля

          System.out.println(">  " + str);

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

          // передавая ее таким образом серверу

          os.write(bKbdInput, 0, length);

         

          // Сбрасываем буфер выходного потока

          os.flush();

          // Принимаем ответ сервера

          length = is.read(buf);

          if(length == -1)

            break;

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

          str = new String(buf, 0);

          st   = new StringTokenizer(str, "\n");

          str = new String((String)st.nextElement());

          System.out.println(">> " + str);

          // Если введена строка 'quit', завершаем

          // работу приложения

          if(str.equals("quit"))

            break;

        }

      }

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

      is.close();

      os.close();

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

      s.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());

    }

  }

}


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