Пытаюсь соединиться с сервером 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: '+errstr, LoadImage('/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_EXIT, 1); 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 МИНУТУ и подключает. У меня такое впечатление что на посылаемые комманды он вообще не реагирует. Через минуту просто выкидывает с таймаутом. Где может быть ошибка?