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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2010, 18:47   #1
Riply
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 21
По умолчанию Скопировать и послать udp-пакет

Есть сервер игры, который в ответ на событие отсылает пользователю определённый udp-пакет. Я попытался этот пакет отснифирить программой Wireshark, надеюсь, это то что мне нужно.
Таким образом, имеется отсниференный программой Wireshark udp-пакет:

Вопрос, как сделать чтобы пакет отправлялся в таком же виде на нужный адрес, эмитируя таким образом отправку пакета сервером.
Подойдёт ли как вариант решения данный кусок чата? Или что нужно добавить/изменить? Спасибо.
Код:
procedure TMainForm.FormCreate(Sender: TObject);
var
 s: string;
begin
  // здесь мы просим ввести IP адрес, по умолчанию стоит "localhost", так что если
  // мы ни чего не введем, то прогрмма будет общаться сама с сабой, ну а если
  // введем, то неплохобы позаботится о наличии на удаленном компьютере
  // запущенной копии нашей программы, для проверки работоспособности
  if InputQuery('Программа-пример по UDP',
  'Введите IP адрес удаленной машины, иначе будете разговаривать сами с сабой :)',s)=true then
  UDPClient.Host:=s;
end;

procedure TMainForm.SendBtnClick(Sender: TObject);
begin
  // здесь просто отправляем текстовое сообщение
  UDPClient.Send('text'+SendEdit.Text);
  SendEdit.Clear;
end;
end.

Последний раз редактировалось Riply; 17.08.2010 в 20:54.
Riply вне форума Ответить с цитированием
Старый 17.08.2010, 20:16   #2
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Для подобного рода вопросов есть раздел "Работа с сетью в Delphi" !!!
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 18.08.2010, 10:28   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цитата:
Вопрос, как сделать чтобы пакет отправлялся в таком же виде на нужный адрес, эмитируя таким образом отправку пакета сервером.
Для начала подучить теорию. В udp нет пакетов, есть датаграммы. (разница на самом деле большая)
А в целом способ элементарен. Эмулируйте набор необходимых данных в tstream-подобной структуре, а потом её отправляйте да хоть с помощью idudpXXX
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 19.08.2010, 01:18   #4
Riply
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 21
По умолчанию

Извините, я начинающий в программировании, каким методом лучше воспользоваться, если я вообще на верном пути:

Код:
IdUDPServer1.Send(AHost: String; const APort: Integer; const AData: String);

IdUDPServer1.SendBuffer(AHost: String; const APort: Integer; var ABuffer; const AByteCount: Integer);
И что теперь прописывать в AData в первом случае или в ABuffer во втором?
Имею ввиду пример присваивания моего потока.
Riply вне форума Ответить с цитированием
Старый 19.08.2010, 11:33   #5
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

ABuffer должен содержать поток необходимых вам символов в hex-е.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 19.08.2010, 21:55   #6
Riply
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 21
По умолчанию

Оно?
Код:
procedure HexToStream(Hex: string; Buf: TStream);
Riply вне форума Ответить с цитированием
Старый 22.08.2010, 01:16   #7
Riply
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 21
По умолчанию

Квэнди, спасибо за подсказки. Немного глупый вопрос как правильно занести hex-строку в массив и правильно ли я заношу его в поток? Просто нет пока возможности тестировать. Так?
Код:
const
St: TStream;
begin
St : array [0..89] of Char = (00,14,d1,62,e4,2d,00,80,48,32,ee,d9,08,00,45,00,00,4c,16,da,00,00,80,11,7d,e5,c0,a8,0a,65,cf,26,0b,ae,08,ff,6c,fc,00,38,86,95,5c,68,65,61,72,74,62,65,61,74,5c,32,33,30,33,5c,67,61,6d,65,6e,61,6d,65,5c,6f,70,66,6c,61,73,68,72,5c,73,74,61,74,65,63,68,61,6e,67,65,64,5c,31)
Или так?
Код:
const
St: TStream;
begin
St : array [0..89] of Char = ('00','14','d1','62','e4','2d','00','80','48','32','ee','d9','08','00','45','00','00','4c','16','da','00','00','80','11','7d','e5','c0','a8','0a','65','cf','26','0b','ae','08','ff','6c','fc','00','38','86','95','5c','68','65','61','72','74','62','65','61','74','5c','32','33','30','33','5c','67','61','6d','65','6e','61','6d','65','5c','6f','70','66','6c','61','73','68','72','5c','73','74','61','74','65','63','68','61','6e','67','65','64','5c','31');

Последний раз редактировалось Riply; 22.08.2010 в 23:07.
Riply вне форума Ответить с цитированием
Старый 17.02.2011, 13:22   #8
Riply
Пользователь
 
Регистрация: 05.10.2009
Сообщений: 21
По умолчанию

Подскажите из-за чего ошибка?
...image has been removed

Последний раз редактировалось Riply; 17.02.2011 в 22:42. Причина: спасибо veniside
Riply вне форума Ответить с цитированием
Старый 17.02.2011, 15:51   #9
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

; после Create
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
UDP клиент-сервер. Пакет neon2k Общие вопросы .NET 1 27.06.2010 11:53
Пакет java.io Syltan Общие вопросы по Java, Java SE, Kotlin 3 17.06.2010 15:46
flap пакет Chel-0007 Общие вопросы C/C++ 0 21.05.2010 14:00
raw пакет spoool Работа с сетью в Delphi 1 02.12.2008 08:43