Руководство по actionscript. часть 6, стр. 045

Отметим, что поведение сервера FileSender полностью автоматизировано: клиенту не требуется запрашивать элемент с сервера или отправлять подтверждение о получении элемента в каком-либо виде. Данная архитектура позволяет сконцентрироваться исключительно на процессе передачи элемента.

В листинге 28.12 представлен исходный код на языке Java для сервера FileSender, любезно предоставленный Дереком Клейтоном (Derek Clayton) для этой книги.

Листинг 28.12. Сервер FileSender

import java. net. ServerSocket:

import java. net. Socket;

import java. io. IOException;

import java. io. InputStream;

import java. io. File;

import java. io. FilelnputStream;

import java. iо. BufferedOutputStream;

/**

* FileSender — это простой сервер, который принимает сокетное соединение

* и передает файл, после чего соединение закрывается. *

* Использование: java FileSender [порт] [имя_файла]

* [порт] = порт, на котором сервер будет ожидать подключения (на всех

* локальных IP-адресах)

* [имя_файла] = путь к передаваемому файлу *

*/

public class FileSender implements Runnable { private int port; private File file; private String filename; private ServerSocket server; private Thread thisThread; private byte[] bytes;

public FileSender(int p, String f) { port = p; filename = f:

}

public void start( ) { InputStream is = null; try {

// — читаем файл в наш массив байтов

file = new File(filename):

is = new FilelnputStream(file);

bytes = new byte[(int)file. length( )+l];

int offset = 0;

int byteRead = 0;

while (offset < bytes.length

&& (byteRead=is. read(bytes, offset, bytes. length-offset)) >= 0) { offset += byteRead;

}

bytes[bytes.1ength-1] = 4;

// — создаем объект ServerSocket server = new ServerSocket(port); } catch (Exception e) { e. printStackTrace( ); System. exit(1); } finally {

if (is!= null) { try {

is. close( ); } catch (Exception e) { e. printStackTrace( ); System. exit(l);

}

}

}

// — запускаем объект Thread, который будет принимать подключения thisThread = new Thread(this); thisThread. start( );

}

public void run( ) {

// — пока сервер активен… while (thisThread!= null) {

BufferedOutputStream ps = null;

Socket socket = null ;

try {

// — …принимаем сокетные соединения

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

// установлено соединение)

socket = server. accept( );

// — создаем выходной поток

ps = new BufferedOutputStream(socket. getOutputStream( ));

// — записываем байты и закрываем соединение ps. write(bytes); ps. close( );

ps = null; socket. close( ); socket = null; } catch(Exception e) { thisThread = null; e. printStackTrace( ): } finally {

if (ps!= null) { try {

ps. close( ); } catch (IOException e) { e. printStackTrace( ); System. exit(1);

}

}

if (socket!= null) { try {

socket. close( ); } catch (IOException e) {

e. printStackTrace( );

System. exit(1);

}

}

}

}

// — освобождаем ресурсы, занимаемые сервером if (server!= null) { try {

server. close( ); } catch (IOException e) { e. printStackTrace( ); System. exit(l);

}

}

}

public final static void main(String [] args) { // — проверяем, все ли аргументы указаны if (args. length!= 2) {

System. out. printlnC’usage: java FileSender [port] [file]«); System. exit(l);

}

try {

// — преобразуем аргументы к их соответствующему типу int port = Integer. parselnt(args[0]); String filename = args[l];

// — создаем и запускаем объект FileSender

// (который будет выполняться // в своем собственном потоке) FileSender fs = new FileSender(port, filename); fs. start< ); catch (exception e) { e.printstacktrace( ); system.exit(l);

S*4

Исходный код для сервера FileSender можно загрузить по адресу http://moock. org/eas3/ examples.

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Оставить комментарий

Вы должны авторизоваться для отправки комментария.

Полезные ссылки
Случайные записи
  • 12.04.2011">Photoshop для начинающих: как вставить фото в готовую рамку?
  • 17.03.2011">Руководство по actionscript. часть 2, стр. 145
  • 23.01.2011">Руководство по actionscript. часть 1, стр. 091
  • 05.03.2011">Руководство по actionscript. часть 5, стр. 009
  • 11.03.2011">Руководство по actionscript. часть 4, стр. 002
  • 24.07.2011">Управляйте мобильными с помощью компьютера
  • 01.10.2010">Что такое экшен и как с ним работать?
  • 17.03.2011">Руководство по actionscript. часть 2, стр. 149
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.43
  • 02.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.125
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.9
  • 23.08.2011">Приложение для Iphone на Ipad
  • 15.03.2011">Руководство по actionscript. часть 3, стр. 050
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.13
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.31
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...