Показать сообщение отдельно
Старый 17.01.2011, 15:34   #1
MotoMustanger
Нуждающийся
 
Регистрация: 13.11.2006
Сообщений: 60
Написано одно полезное сообщение
Сообщение irc через сокет

Пытаюсь соединиться с сервером irc через сокет:
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 МИНУТУ и подключает. У меня такое впечатление что на посылаемые комманды он вообще не реагирует. Через минуту просто выкидывает с таймаутом. Где может быть ошибка?
(Offline)
 
Ответить с цитированием