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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2010, 01:46   #21
feLoNy
Пользователь
 
Аватар для feLoNy
 
Регистрация: 11.01.2010
Сообщений: 31
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
"ну, як вареник, так ще й до рота"... а взять литературку почитать и поиск по-форуму разве ничего не дал.
ладно отсылкой погорячился =) структуру нашел... но как создать её, куда писать. я сам наверн щас как вареник Откажитесь от помощи пойму, тем более от простуды уже мозги у самого мало варят.
feLoNy вне форума Ответить с цитированием
Старый 12.01.2010, 01:51   #22
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

как создать в посте #18 уже расписано, вы только заполните ее данными из поста #20... например на си "bn_int users;" -> на delphi "users: integer;"

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

Цитата:
Сообщение от raxp Посмотреть сообщение
как создать в посте #18 уже расписано, вы только заполните ее данными из поста #20... например на си "bn_int users;" -> на delphi "users: integer;"

смысл ясен?
думаю что да =) буду завтра уже разбираться. это всё писать в type ?
а byte и short в делфи как?

Последний раз редактировалось feLoNy; 12.01.2010 в 02:13.
feLoNy вне форума Ответить с цитированием
Старый 12.01.2010, 09:05   #24
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

byte = byte
short = shortint
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.01.2010, 13:39   #25
feLoNy
Пользователь
 
Аватар для feLoNy
 
Регистрация: 11.01.2010
Сообщений: 31
По умолчанию

а как прописать байты? software[32] например?
software[32]: byte;
?
Если я правильно понял то 32 это длина в байтах?
feLoNy вне форума Ответить с цитированием
Старый 12.01.2010, 13:57   #26
feLoNy
Пользователь
 
Аватар для feLoNy
 
Регистрация: 11.01.2010
Сообщений: 31
По умолчанию

И ещё вопрос: как правильно вывести это в Memo?
Код:
 Memo1.Lines.Insert(0,'> Users:'+IntToStr(packet.users));
при таком раскладе он выводит "> Users:1196455504" хотя это явно не так =)
Вопрос выше тоже актуален.
feLoNy вне форума Ответить с цитированием
Старый 12.01.2010, 14:09   #27
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Memo1.Lines.Insert(0,'> Users:'+IntToStr(packet.users));

при таком раскладе он выводит "> Users:1196455504" хотя это явно не так =)
users; /* current number of users, network byte order */
пока вы четко не пропишете всю структуру, так и будет, т.к. это "налезают" другие параметры... и там будет бред.
Цитата:
software[32]: byte;
software: array [0..31] of byte;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 12.01.2010, 15:13   #28
feLoNy
Пользователь
 
Аватар для feLoNy
 
Регистрация: 11.01.2010
Сообщений: 31
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
users; /* current number of users, network byte order */
пока вы четко не пропишете всю структуру, так и будет, т.к. это "налезают" другие параметры... и там будет бред.

software: array [0..31] of byte;
у меня получилась следующая структура:
Код:
type t_trackpacket = record
    packet_version: shortint;
    port: shortint;
    flags: integer;
    software: array [0..31] of byte;
    version: array [0..15] of byte;
    platform: array [0..31] of byte;
    server_desc: array [0..63] of byte;
    server_location: array [0..63] of byte;
    server_url: array [0..95] of byte;
    contact_name: array [0..63] of byte;
    contact_email: array [0..63] of byte;
    users: integer;
    channels: integer;
    games: integer;
    uptime: integer;
    total_games: integer;
    total_logins: integer;
end;
при приёме первого же пакета, выдаёт ошибку:
Project Tracker.exe raised exception class EReadError with message 'Stream read error'. Process stoped. Use Step or Run to continue.
Что делать?(
Код:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
msg: TStringStream;
packet: t_trackpacket;
begin
adata.Read(packet, SIZEOF(packet));
 msg:= TStringStream.Create('');
 msg.CopyFrom(adata, sizeof(adata));
 msg.Position:= 0;
 Memo1.Lines.Insert(0,'> '+msg.DataString);
 Memo1.Lines.Insert(0,'> ver:'+IntToStr(packet.packet_version));
 Memo1.Lines.Insert(0,'> flags:'+IntToStr(packet.flags));
 Memo1.Lines.Insert(0,'> Port:'+IntToStr(packet.port));
 Memo1.Lines.Insert(0,'> Users:'+IntToStr(packet.users));
 Memo1.Lines.Insert(0,'> Channels:'+IntToStr(packet.channels));
 Memo1.Lines.Insert(0,'> Games:'+IntToStr(packet.games));
 Memo1.Lines.Insert(0,'> Uptime:'+IntToStr(packet.uptime));
 Memo1.Lines.Insert(0,'> '+IntToStr(packet.total_games));
 Memo1.Lines.Insert(0,'> '+IntToStr(packet.total_logins));
 msg.Free;
end;
feLoNy вне форума Ответить с цитированием
Старый 12.01.2010, 15:39   #29
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

типы данных в структуре заданы верно, так как sizeof(packet) дает как раз 464 байта, про которые вы упоминали ранее... работу с msg уберите...
Код:
 // это лишнее
 msg:= TStringStream.Create('');
 msg.CopyFrom(adata, sizeof(adata));
 msg.Position:= 0;
 msg.Free;

upd
-------

наваял тестовый проект отправки-приема структуры для проверки, все идет без глюков (см. вложение)
Код:
uses IdSocketHandle;

type t_trackpacket = record
    packet_version: shortint;
    port: shortint;
    flags: integer;
    software: array [0..31] of byte;
    version: array [0..15] of byte;
    platform_: array [0..31] of byte;
    server_desc: array [0..63] of byte;
    server_location: array [0..63] of byte;
    server_url: array [0..95] of byte;
    contact_name: array [0..63] of byte;
    contact_email: array [0..63] of byte;
    users: integer;
    channels: integer;
    games: integer;
    uptime: integer;
    total_games: integer;
    total_logins: integer;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
var t: t_trackpacket;
begin
 t.flags:= strtoint(edit1.Text);
 IdUDPClient1.SendBuffer('localhost', 800, t, sizeof(t)) // отправка структуры
end;

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var packet: t_trackpacket;
begin
 adata.Read(packet, SIZEOF(packet)); // прием структуры

 edit2.Text:= inttostr(packet.flags)
end;
Изображения
Тип файла: jpg скрин.jpg (9.5 Кб, 81 просмотров)
Вложения
Тип файла: zip raxp_тест idUDPserver + idUDPclient.zip (1.9 Кб, 125 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 12.01.2010 в 15:55.
raxp вне форума Ответить с цитированием
Старый 12.01.2010, 17:11   #30
feLoNy
Пользователь
 
Аватар для feLoNy
 
Регистрация: 11.01.2010
Сообщений: 31
По умолчанию

Цитата:
> 0
> 0
> Uptime:2098987008
> Games:0
> Channels:738197504
> Users:0
> Port:2
> flags:0
> ver:0
сведения явно не достоверны)
feLoNy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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