Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 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)
 
Ответить с цитированием
Старый 18.01.2011, 01:10   #2
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: irc через сокет

Ошибка может быть и в самой библиотеке, на оправку я ее не тестировал. В обработчик ошибок ничего не сваливается?
(Offline)
 
Ответить с цитированием
Старый 18.01.2011, 15:18   #3
MotoMustanger
Нуждающийся
 
Регистрация: 13.11.2006
Сообщений: 60
Написано одно полезное сообщение
Ответ: irc через сокет

В другом irc клиенте сервер работает нормально. Ошибки бывают, но только после завершения пинга сервера. Выкладываю проэкт для лучшего представления ситуации.
Вложения
Тип файла: zip Example.zip (13.7 Кб, 435 просмотров)
(Offline)
 
Ответить с цитированием
Старый 18.01.2011, 18:12   #4
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: irc через сокет

Так должно быть (второй блок данных пришел спустя некоторое время после первого)?
Нажмите на изображение для увеличения
Название: test_1.png
Просмотров: 1091
Размер:	5.7 Кб
ID:	12407
(Offline)
 
Ответить с цитированием
Старый 18.01.2011, 18:26   #5
MotoMustanger
Нуждающийся
 
Регистрация: 13.11.2006
Сообщений: 60
Написано одно полезное сообщение
Ответ: irc через сокет

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

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

а он ругается
ERROR :Closing Link: 0.0.0.0 (Connection Timed Out)
(Offline)
 
Ответить с цитированием
Старый 18.01.2011, 18:51   #6
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: irc через сокет

Непонятно в чем дело. Lib_socket дает такой же результат, так что дело видимо не в библиотеке. Возможно, какая-то ошибка в передаваемых данных.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
MotoMustanger (19.01.2011)
Старый 18.01.2011, 19:58   #7
MotoMustanger
Нуждающийся
 
Регистрация: 13.11.2006
Сообщений: 60
Написано одно полезное сообщение
Ответ: irc через сокет

Да, странно все это

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

Последний раз редактировалось MotoMustanger, 19.01.2011 в 00:44.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com