forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   irc через сокет (http://forum.boolean.name/showthread.php?t=14073)

MotoMustanger 17.01.2011 15:34

irc через сокет
 
Пытаюсь соединиться с сервером irc через сокет:
PHP код:

program Binsock_test;
uses binsock;

var
 
cmOK,ok:command;
 
C:command;
 
i,r,j1,j2:Integer;
 
Data:string;
 
L:Integer;
 
//Внимание!
//Данный пример использует доступ к сети (траффик < 1 KB)
 

//Процедура-обработчик ошибок, обязательно должна быть, если включена отладка (enable_debug(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;

begin
 ShowForm
;
 
 
binsock.debug_register(0); //Регистрация идентификатора библиотеки для отладки
 
binsock.enable_debug(1); //1 - включение режима отладки, -1 - отключение
 
 
i:=FormAddString('Connecting...'+chr(10));
 
 
r:=binsock.open('socket://ircworld.ru:6667'); //Подключение
 
Delay(1000); //Пауза, чтобы программа успела подключиться
 
j1:=write_bin('/NICK PointsLMG'); 
    
j1:=flush;//Отправка данных
    
j2:=write_bin('/USER PointsLMG 8 * :a client for the game Points');
    
j2:=flush;//Отправка данных
 
i:=FormAddString('Loading...'+chr(10));
 
ok:=CreateCommand('Выход'CM_EXIT1); AddCommand(ok); // Добавление кнопки
 
repeat
    L
:=binsock.available//Определение размера данных в буфере приема
    
if L>0 then
    begin
        i
:=FormAddString('Data stream length: '+IntegerToString(L)+chr(10));
        
data:=read_bin(L); //Чтение бинарных данных (L байт)
 
        
i:=FormAddString('[DATA STREAM BEGIN]'+chr(10));
 
        
i:=FormAddString(data);
        
debug(data);
 
        
i:=FormAddString('[DATA STREAM END]'+chr(10));
    
end;
    
Delay(50);
 
until (GetClickedCommand ok); // Ожидание нажатия
 
i:=FormAddString('Closing connection...'+chr(10));
 
binsock.close//Закрытие соединения
 
 
i:=FormAddString('Connection closed'+chr(10));
 
Delay(3000);
end

Принимаю данные нормально. Серверу сразу после соединения надо послать 2 комманды - /NICK и /USER
Потом он думает 1 МИНУТУ и подключает. У меня такое впечатление что на посылаемые комманды он вообще не реагирует. Через минуту просто выкидывает с таймаутом. Где может быть ошибка?

ViNT 18.01.2011 01:10

Ответ: irc через сокет
 
Ошибка может быть и в самой библиотеке, на оправку я ее не тестировал. В обработчик ошибок ничего не сваливается?

MotoMustanger 18.01.2011 15:18

Ответ: irc через сокет
 
Вложений: 1
В другом irc клиенте сервер работает нормально. Ошибки бывают, но только после завершения пинга сервера. Выкладываю проэкт для лучшего представления ситуации.

ViNT 18.01.2011 18:12

Ответ: irc через сокет
 
Вложений: 1
Так должно быть (второй блок данных пришел спустя некоторое время после первого)?
Вложение 12407

MotoMustanger 18.01.2011 18:26

Ответ: irc через сокет
 
Оно по разному бывает. Бывает все сразу, а может и по две строчки. Но проблема в том что на исходящие комманды никак не реагирует.

Там должна пройти 1 минута и сервер должен ответить
:ircworld.msk.wenet.ru 001 PointsLMG :Welcome to the WeNet IRC Network

а он ругается
ERROR :Closing Link: 0.0.0.0 (Connection Timed Out)

ViNT 18.01.2011 18:51

Ответ: irc через сокет
 
Непонятно в чем дело. Lib_socket дает такой же результат, так что дело видимо не в библиотеке. Возможно, какая-то ошибка в передаваемых данных.

MotoMustanger 18.01.2011 19:58

Ответ: irc через сокет
 
Да, странно все это

Разобрался - действительно надо было подправить комманды)


Часовой пояс GMT +4, время: 20:15.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot