Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

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

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

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

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

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

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

icq: 446843180
skype: phoenix_proger
По умолчанию

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

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

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

Цитата:
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, 16:13   #28
feLoNy
Пользователь
 
Аватар для feLoNy
 
Регистрация: 11.01.2010
Сообщений: 31
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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, 16:39   #29
raxp
Профессионал
 
Регистрация: 29.09.2009
Сообщений: 9,742
Репутация: 3006
По умолчанию

типы данных в структуре заданы верно, так как 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;
Изображения
 
Вложения
Тип файла: zip raxp_тест idUDPserver + idUDPclient.zip (1.9 Кб, 122 просмотров)
__________________
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

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

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

Опции темы

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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 20:03
Не не знаю в чем проблема с IdUDPServer D@rk M@k Работа с сетью в Delphi 2 28.12.2007 16:46
idudpserver+mssql+adodataset vodila БД в Delphi 1 11.08.2007 09:56


06:31.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.