Форум: "Сети";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
ВнизГоспода, посоветуйте плз, как отправить 16ричный код, в TcpClient Найти похожие ветки
← →
Layner © (2005-05-05 13:13) [0]TcpClient1.Sendln("81c0"); Приходит не 16ричное значение, а такая же строка...
Полный код такой:TcpClient1.RemoteHost:="127.0.0.9";
TcpClient1.RemotePort:="9999";
TcpClient1.SockType:= stStream;
TcpClient1.Connect;
TcpClient1.Sendln("81c0");
TcpClient1.Disconnect;
надо слать только 16значение.. Что бы пакет выглядел так:0x0000 00 0B 46 D5 8B 00 00 0D-60 EC 76 60 08 00 45 00 ..FÕ‹...`ìv`..E.
0x0010 00 4F D4 DB 40 00 80 06-00 00 AC 15 51 DC AC 15 .OÔÛ@.?...¬.Qܬ.
0x0020 05 D0 12 78 13 8D D5 64-1A B1 44 05 64 62 50 18 .Ð.x.Õd.±D.dbP.
0x0030 FF F3 B0 18 00 00 81 C0
2 последние значения пересылаемое значение, остальное это заголовок TCP пакета.
Заранее благодарю.
← →
Digitman © (2005-05-05 13:24) [1]
> Приходит не 16ричное значение, а такая же строка
строку отправил - строку же и принял ... чему ж тут удивляться ?
> как отправить 16ричный к
именно строку в 16-ричном коде ты и отправляешь .. ее же и жди ..
а если не строку, то ни о каком 16-ричном коде не может идти и речи : 16-ричный код - это не иначе как строковое представление некоего значения
← →
Ozone © (2005-05-05 13:26) [2]
> TcpClient1.Sendln("81c0"); Приходит не 16ричное значение,
> а такая же строка...
Чего-т не понял.... Ты отсылаешь строку, получаешь строку... Что не устраивает?
← →
Layner © (2005-05-05 13:27) [3]В общем сейчас приходит вместо 81 C0 (2 посл. символа в вышеприведенном листинге) - 38 31 63 30 30 ... А надо чисто, если шлю TcpClient1.Sendln("81c0"); (слать видимо не так надо) то получить 81 C0
← →
Layner © (2005-05-05 13:29) [4]Да, все верно, шлется именно строкой, Sendln переводит все в строку, а как отправить то, что подготовил (состряпал я сам 16ричное значение, теперь бы его отправить..)?
← →
Digitman © (2005-05-05 13:31) [5]
> Layner © (05.05.05 13:27) [3]
либо посылай не строку, а WORD-переменную, содержащую значение $c081, либо посылай-принимай строку. а после приема строки преобразовывай ее значение WORD-типу (см. StrToInt() )
← →
Digitman © (2005-05-05 13:33) [6]
> Sendln переводит все в строку
ничего она не "переводит".
вызвав Sendln() ты тем самым сказал : передать (Send) строку (Line) , и указал какую конкретно строку следует передать
← →
Layner © (2005-05-05 13:37) [7]Digitman
Спасибо, а как моим способом отправить WORD значение?
← →
Layner © (2005-05-05 13:42) [8]Скорей всего TcpClient1.SendTo, сейчас попробую :)
← →
Layner © (2005-05-05 14:07) [9]А никто случайно не знает, как перечислить параметры в SendTo? В справке есть
Delphi syntax:
function SendTo: (var buf; bufsize: integer; ToAddr: TSockAddr; flags: integer = 0): integer;
Что вставить в моем случае в TSockAddr?
← →
Layner © (2005-05-05 14:36) [10]Вопросы продолжаются, может воспользоваться другими компанентами, не TTcpClient? Замаялся уже отправлять свою строку :(
Результат должен быть такой, есть программа, которая принимает данные. Данные строго типолизированные, т.е. первые 2 байта на метку, ещё 4 байта на время, ещё 4 байта на служебную инфу... такие дела, и как слать эти байты, понять не могу. Строку слать, нет проблем. Написать побуквенно, что надо слать, тоже нет проблем. Но строку (string) не принимает приёмная программа. Т.к. у каждого символа там уже совсем другие байты.
Т.е. шлю я например 10, а на приемник приходит31 30 0D 0A 00 00
, хотя надо получить 1 байт -10
...
← →
Layner © (2005-05-05 15:40) [11]8-(
← →
Ozone © (2005-05-06 07:03) [12]> [8] Layner © (05.05.05 13:42)
Что за компоненты используешь? Чего-т не пойму... На Indy похоже по названию, но на TCP клиенте у него нет такой функции...
> Что вставить в моем случае в TSockAddr?
Заполненную структуру с адресом и портом сервера ессно.
← →
Layner © (2005-05-06 08:21) [13]Ozone
Компанент с вкладки Internet в D7, TcpClient1: TTcpClient;
Структуру понятно, а в таком случаеTcpClient1.RemoteHost:="127.0.0.9";
TcpClient1.RemotePort:="9999";
Не заполнять?
В моем случае, пишу такprocedure TForm1.Button3Click(Sender: TObject);
var
Addr: TSockAddr;
begin
Addr.sin_family := AF_INET;
Addr.sin_addr.S_addr := INADDR_ANY;
Addr.sin_port := htons(9999);
TcpClient1.SendTo($5, 2, Addr, 0); //<ошибка [Error] Unit1.pas(73): Constant object cannot be passed as var parameter
end;
Перефразирую вопрос, как можно отправить 16тиричные значения по сети TCP/IP, есть порт и IP?
← →
Digitman © (2005-05-06 08:35) [14]
> как можно отправить 16тиричные значения
именно так как ты и отправлял их до сих пор - строкой
а то что хранится в переменной типа WORD - это НЕ 16тиричное значение, это просто некое значение.
← →
Layner © (2005-05-06 08:48) [15]Digitman © (06.05.05 08:35)
Хорошо, а вот так:
TcpClient1.Sendln("81c0");
Присылаются же не 16ричшые значения, а простая строка? А как тогда скинуть 16ричные? Отправлять WORD? А как слать WORD через Sendln?
← →
Ozone © (2005-05-06 08:56) [16]> [13] Layner © (06.05.05 08:21)
Заполнять можешь функцией GetSocketAddr.
> TcpClient1.SendTo($5, 2, Addr, 0); //<ошибка [Error] Unit1.pas(73):
> Constant object cannot be passed as var parameter
Сам же писал синтаксис SendTo в [9]. Заполняй сначала буфер 16-ричными значениями и потом отправляй.
← →
Ozone © (2005-05-06 09:04) [17]> [15] Layner © (06.05.05 08:48)
Т.е. делаешьbuf
типаarray [0..N] of WORD
, заполняешьbuf[0] = $FFF
и т.п. и отправляешьSendTo(buf, sizeof(buf), addr).
Но, перед этим неплохо бы серверу знать размер буфера, поэтому сначала можешь послать егоSendLn(IntToStr(sizeof(buf))).
← →
Digitman © (2005-05-06 09:31) [18]
> Присылаются же не 16ричшые значения, а простая строка?
"присылается" строка, содержащая 16-ричное представление некоего числового значения
← →
Layner © (2005-05-06 10:41) [19]Ozone © (06.05.05 09:04)
Огромное спасибо! Теперь то понял, как WORD слать через SendTo, теперь все ОК!, формирую пакет какой мне надо, и приходит то что надо!
Всех поздравляю с наступающими праздниками 9 мая!!!
← →
Digitman © (2005-05-06 11:10) [20]сервер на то и сервер, чтобы быть "умным".. в отличие от клиента ..
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.011 c