Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2010, 15:11   #41
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
4 а вот про это поподробнее можно?
простой пример: имеем строку или массив символов 'server', каждый символ можно представить asc кодом $73 $65 $72 $76 $65 $72 (array of byte), этот массив входит в описанную стуктуру и отсылается клиентом серверу, сервер принял пакет, из этого пакета мы имеем некий параметр описанный как array of byte... что же нужно для восстановления? всего-лишь применить к каждому элементу массива функцию преобразования в символ, chr или char/ вот и все.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 15.01.2010, 23:52   #42
feLoNy
Пользователь
 
Аватар для feLoNy
 
Регистрация: 11.01.2010
Сообщений: 31
По умолчанию

переделал в структуре просто. т.е. byte заменил на char и работает =))))
Код:
...
platform: array [0..31] of char;
...
Цитата:
> ver:0
> flags:0
> Port:2
> Users:0
> Channels:44
> Games:0
> Uptime:51
> Games:0
> Logins clients:0
> Software:PvPGN
> Version:1.99.0-SVN
> Platform:Windows XP
> Description:unknown
> Location:RU
> URLvpgn.*****
> Owner:feLoNy
> e-mail:felony@*****
>------------
Вопрос возник следующий )) как бы теперь с временем разобраться
На мой взгляд "bn_int" нечто другое а не просто integer =)
посмотрите подалуйста в папке common файлы bn_type.* там как раз что то делаеться, только не пойму чего) и как это обратно привести в нормальный вид на паскале? конкретнее по
bn_short_nset
bn_int_nset
ну а с байтами вроде наконец нормально работает)
извените за нагрузку :-[

Последний раз редактировалось feLoNy; 16.01.2010 в 00:17.
feLoNy вне форума Ответить с цитированием
Старый 16.01.2010, 01:55   #43
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
как бы теперь с временем разобраться...
вы про вот это "> Uptime:51" ? а как меняется его величина с течением времени? если исходить из
Цитата:
bn_int uptime; /* daemon uptime in seconds, network byte order */
то к-во секунд с момента включения.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.01.2010, 19:37   #44
feLoNy
Пользователь
 
Аватар для feLoNy
 
Регистрация: 11.01.2010
Сообщений: 31
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
вы про вот это "> Uptime:51" ? а как меняется его величина с течением времени? если исходить изто к-во секунд с момента включения.
да про это.
Без деления как я и сказал достигая своей максимальной велечины (2147483647) пояляеться минус и начинаеться отсчёт от минимальной величины (-2147483648) до нуля и опять в плюс.... это выходит щас на практике.
кстати нашел в ченжлоге исходников кое что...
Код:
typedef struct
 {
-  unsigned short packet_version;      /* set to TRACK_VERSION, network byte order */
-  unsigned short port;                /* port server is listening on, network byte order */
-  unsigned long  flags;               /* see below, network byte order */
-  char           software[32];        /* example: Bnetd, NUL terminated */
-  char           version[16];         /* example: 0.4, NUL terminated */
-  char           platform[32];        /* Windows, Linux, etc., NUL terminated */
-  char           server_desc[64];     /* description, NUL terminated */
-  char           server_location[64]; /* geographical location, NUL terminated */
-  char           server_url[96];      /* web address: http://..., NUL terminated */
-  char           contact_name[64];    /* name of operator, NUL terminated */
-  char           contact_email[64];   /* e-mail address of operator, NUL terminated */
-  unsigned long  users;               /* current number of users, network byte order */
-  unsigned long  channels;            /* current number of channels, network byte order */
-  unsigned long  games;               /* current number of games, network byte order */
-  unsigned long  uptime;              /* daemon uptime in seconds, network byte order */
-  unsigned long  total_games;         /* total number of games served */
-  unsigned long  total_logins;        /* total number of client logins */
+  bn_short	packet_version;      /* set to TRACK_VERSION, network byte order */
+  bn_short	port;                /* port server is listening on, network byte order */
+  bn_int	flags;               /* see below, network byte order */
+  bn_byte	software[32];        /* example: Bnetd, NUL terminated */
+  bn_byte	version[16];         /* example: 0.4, NUL terminated */
+  bn_byte	platform[32];        /* Windows, Linux, etc., NUL terminated */
+  bn_byte	server_desc[64];     /* description, NUL terminated */
+  bn_byte	server_location[64]; /* geographical location, NUL terminated */
+  bn_byte	server_url[96];      /* web address: http://..., NUL terminated */
+  bn_byte	contact_name[64];    /* name of operator, NUL terminated */
+  bn_byte	contact_email[64];   /* e-mail address of operator, NUL terminated */
+  bn_int	users;               /* current number of users, network byte order */
+  bn_int	channels;            /* current number of channels, network byte order */
+  bn_int	games;               /* current number of games, network byte order */
+  bn_int	uptime;              /* daemon uptime in seconds, network byte order */
+  bn_int	total_games;         /* total number of games served */
+  bn_int	total_logins;        /* total number of client logins */
 
   /* new versions will add fields to end of packet */
 } t_trackpacket;
может как нибудь поможет?
если сделать структуру пакета по старому принципу....
при смене типа в пакете типа uptime с integer на cardinal значение времени доходит до 255 секунд после чего опять идёт с нуля...

Последний раз редактировалось feLoNy; 16.01.2010 в 20:13.
feLoNy вне форума Ответить с цитированием
Старый 16.01.2010, 20:27   #45
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...гляньте-ка help по типам данных в delphi.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.01.2010, 20:29   #46
feLoNy
Пользователь
 
Аватар для feLoNy
 
Регистрация: 11.01.2010
Сообщений: 31
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
...гляньте-ка help по типам данных в delphi.
глядел. ничего не помогает
feLoNy вне форума Ответить с цитированием
Старый 16.01.2010, 21:05   #47
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

а если приглядеться...
Изображения
Тип файла: jpg типы.jpg (41.3 Кб, 118 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.01.2010, 21:09   #48
feLoNy
Пользователь
 
Аватар для feLoNy
 
Регистрация: 11.01.2010
Сообщений: 31
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
а если приглядеться...
читал, пробывал, не помогает. наверн на время оставлю этот проект. станет получше попробую поглубже порыться в исходниках "клиента".
З.Ы. integer на cardinal поменял, о чём писал выше. а на что вы ещё намекаете не понимаю. при использовании других типов("повместительнее", например int64), данные не достоверны. Например в Software отображается только буква N и идёт не время а игры :D :D :D

Последний раз редактировалось feLoNy; 16.01.2010 в 21:13.
feLoNy вне форума Ответить с цитированием
Старый 16.01.2010, 21:40   #49
feLoNy
Пользователь
 
Аватар для feLoNy
 
Регистрация: 11.01.2010
Сообщений: 31
По умолчанию

и извеняюсь за оффтоп небольшой, но всё же
Вот код на си:
Код:
extern int bn_byte_set(bn_byte * dst, t_uint8 src);
extern int bn_short_set(bn_short * dst, t_uint16 src);
extern int bn_short_nset(bn_short * dst, t_uint16 src);
extern int bn_int_set(bn_int * dst, t_uint32 src);
extern int bn_int_nset(bn_int * dst, t_uint32 src);
и
Код:
extern int bn_byte_set(bn_byte * dst, t_uint8 src)
{
    if (!dst)
    {
	eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
	return -1;
    }

    (*dst)[0] = (unsigned char)((src    )     );
    return 0;
}


extern int bn_short_set(bn_short * dst, t_uint16 src)
{
    if (!dst)
    {
	eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
	return -1;
    }

    (*dst)[0] = (unsigned char)((src    )&0xff);
    (*dst)[1] = (unsigned char)((src>> 8)     );
    return 0;
}


extern int bn_short_nset(bn_short * dst, t_uint16 src)
{
    if (!dst)
    {
	eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
	return -1;
    }

    (*dst)[0] = (unsigned char)((src>> 8)     );
    (*dst)[1] = (unsigned char)((src    )&0xff);
    return 0;
}


extern int bn_int_set(bn_int * dst, t_uint32 src)
{
    if (!dst)
    {
	eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
	return -1;
    }

    (*dst)[0] = (unsigned char)((src    )&0xff);
    (*dst)[1] = (unsigned char)((src>> 8)&0xff);
    (*dst)[2] = (unsigned char)((src>>16)&0xff);
    (*dst)[3] = (unsigned char)((src>>24)     );
    return 0;
}


extern int bn_int_nset(bn_int * dst, t_uint32 src)
{
    if (!dst)
    {
	eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
	return -1;
    }

    (*dst)[0] = (unsigned char)((src>>24)     );
    (*dst)[1] = (unsigned char)((src>>16)&0xff);
    (*dst)[2] = (unsigned char)((src>> 8)&0xff);
    (*dst)[3] = (unsigned char)((src    )&0xff);
    return 0;
}


#ifdef HAVE_T_LONG
extern int bn_long_set(bn_long * dst, t_uint64 src)
{
    if (!dst)
    {
	eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
	return -1;
    }

    (*dst)[0] = (unsigned char)((src    )&0xff);
    (*dst)[1] = (unsigned char)((src>> 8)&0xff);
    (*dst)[2] = (unsigned char)((src>>16)&0xff);
    (*dst)[3] = (unsigned char)((src>>24)&0xff);
    (*dst)[4] = (unsigned char)((src>>32)&0xff);
    (*dst)[5] = (unsigned char)((src>>40)&0xff);
    (*dst)[6] = (unsigned char)((src>>48)&0xff);
    (*dst)[7] = (unsigned char)((src>>56)     );
    return 0;
}


extern int bn_long_nset(bn_long * dst, t_uint64 src)
{
    if (!dst)
    {
	eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
	return -1;
    }

    (*dst)[0] = (unsigned char)((src>>56)     );
    (*dst)[1] = (unsigned char)((src>>48)&0xff);
    (*dst)[2] = (unsigned char)((src>>40)&0xff);
    (*dst)[3] = (unsigned char)((src>>32)&0xff);
    (*dst)[4] = (unsigned char)((src>>24)&0xff);
    (*dst)[5] = (unsigned char)((src>>16)&0xff);
    (*dst)[6] = (unsigned char)((src>> 8)&0xff);
    (*dst)[7] = (unsigned char)((src    )&0xff);
    return 0;
}
объясните по русски
feLoNy вне форума Ответить с цитированием
Старый 16.01.2010, 21:56   #50
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

смещение и формирование структуры...
вот >>> тут <<< хорошие книжки.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IdUDPServer indy 10 rangel Работа с сетью в Delphi 13 27.07.2011 11:03
IdUdpServer CrazyProgramer Работа с сетью в Delphi 9 21.07.2008 16:36
Ошибка в IdUDPServer Иллидан Работа с сетью в Delphi 1 24.02.2008 19:03
Не не знаю в чем проблема с IdUDPServer D@rk M@k Работа с сетью в Delphi 2 28.12.2007 15:46
idudpserver+mssql+adodataset vodila БД в Delphi 1 11.08.2007 09:56