Показать сообщение отдельно
Старый 20.08.2009, 19:09   #1
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Lib_binsock: прием/отправка бинарных данных через сокет

Lib_binsock - библиотека для работы с сокетами в трех режимах:
-побайтно(прием/передача)
-прием/передача массивов бинарных данных
-InputStream(Resource)

Обновление. В версии 1.1 добавлена функция flush для немедленной отправки данных

Библиотека содержит следующие функции:

procedure debug_register(idx:integer);
Устанавливает библиотеке идентификатор, который будет передаваться
в обработчик ошибок (о нем ниже) в случае возникновения исключительной ситуации(Exception).

procedure enable_debug(flag:integer);
Включает/отключает режим отладки.
flag = 1 - включить
flag = -1 - выключить
По умолчанию отладка отключена.

Если отладка включена, то в случае возникновения ошибки
вызывается процедура-обработчик, определенная в главной программе, например:

//sender - числовой идентификатор библиотеки, присваиваемый с помощью debug_register
//exception - системное сообщение об ошибке
//errstr - дополнительное сообщение (указанное при компиляции библиотеки)
//code - код ошибки (указанный при компиляции библиотеки)
procedure onerror(sender:Integer;exception:string;errstr:string;code:integer);
//Имя процедуры, порядок и тип параметров должны быть соблюдены !
begin
 cmOK
:=CreateCommand('OK',CM_OK,1);
 
ShowAlert('Error #'+IntegerToString(code),'Exception: '+exception+chr(10)+chr(13)+'ErrorString: '+errstrLoadImage('/icon.png'),ALERT_ERROR);
 
delay(20000);
 
ShowForm;
end
Параметр code может иметь следующие значения:

int ERR_OPENERROR = 0; - ошибка открытия сокета
int ERR_CLOSEERROR = 1; - ошибка закрытия сокета
int ERR_AVAILERROR = 2; - ошибка при определении размера буфера
int ERR_READERROR = 3; - ошибка получения данных
int ERR_WRITEERROR = 4; - ошибка отправки данных


Внимание!
В случае, если отладка включена, обработчик должен присутствовать обязательно,
иначе возможен сбой в работе мидлета; если отладка отключена, обработчик объявлять не обязательно.


function open(url:string):integer;
Открывает соединение с адресом url.
Формат url стандартный:
socket://url:port

Возвращает 1 в случае успеха, иначе возвращает -1 и передает в обработчик сообщение об ошибке ERR_OPENERROR.

procedure close;
Закрывает соединение.

В случае неудачи передает в обработчик сообщение об ошибке ERR_CLOSEERROR.

function available:integer;
Возвращает размер доступных для приема данных.

В случае неудачи возвращает -1 и передает в обработчик сообщение об ошибке ERR_AVAILERROR.

function read_byte:integer;
Возвращает следующий байт данных из буфера приема, в случае неудачи возвращает -1 и передает в обработчик сообщение об ошибке ERR_READERROR.

function write_byte(data:integer):integer;
Записывает в буфер передачи байт data.

Возвращает 1 в случае успеха, иначе возвращает -1 и передает ошибку ERR_WRITEERROR.

function get_in_stream:resource;
Возвращает поток resource для подключения.

function write_bin(data:string):integer;
Записывает массив байт data в поток передачи.

Возвращает 1 в случае успеха, иначе возвращает -1 и передает ошибку ERR_WRITEERROR.

function read_bin(len:integer):string;
Возвращает массив байт из входящего потока.

В случае неудачи возвращает null и передает в обработчик сообщение ERR_READERROR.

function rx_count:integer;
Возвращает количество принятых данных.

function tx_count:integer;
Возвращает размер принятых данных.

function flush:integer; c версии 1.1

Инициирует немедленную отправку данных на сервер

Возвращает 1 в случае успеха, иначе возвращает -1 и передает в обработчик сообщение об ошибке
ERR_FLUSHERROR.

Внимание!
---------

Библиотека требует доступа к сети

Проверено на Motorola L9.

Отправку данных проверить не смог, но должно работать.


P.S. Предлагаю всем разработчикам в своих новых библиотеках (еще лучше и старые переделать) использовать такой же принцип обработки ошибок. Чуть позже опишу принцип подробнее. Основная идея состоит в том, чтобы использовать общий обработчик для обработки ошибок от всех библиотек.
Вложения
Тип файла: zip Lib_binsock1.1.zip (12.7 Кб, 1339 просмотров)

Последний раз редактировалось ViNT, 10.04.2010 в 21:50.
(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо ViNT за это полезное сообщение:
impersonalis (25.08.2009), johnk (20.08.2009), odd (03.12.2009), Pyth_ON (26.02.2010), Skythrone (21.08.2009)