Конференция "Начинающим" » отправка пакета ( TcpClient ) [D7, WinXP]
 
  • Дмитрий (15.03.10 01:33) [0]
    Доброго времени суток. Я начинающий ( совсем начинающий ) программист и с одной задачкой зашёл в тупик. Задача такая :
    имеется пакет в таком виде
    05 00 15 0C 00 00 00 00 00 00 00 00 00 00 00 00


    и его нужно отправить на сервер ... Загвоздка у меня в том, что я не могу его как либо преобразовать, некоторые пакеты "в нормальном" виде у меня удалось отправить, а вот с пакетом такого вида проблемма
    var
    i:Integer;
    ip_con:String;
    l:String;
    begin
    ip_con:='***.***.***.***;
    for i:=38700 to 38710 do
    begin
    TcpClient2.RemoteHost:=ip_con;
    TcpClient2.RemotePort:=IntToStr(i);
    TcpClient2.Open;
    if TcpClient2.Connected then
    begin
    showmessage('
    ЛяЛяЛяЛя');
    TcpClient2.Sendln(??????????????????);


    И вот как пакет 05 00 15 0С отправить через TcpClient2.Sendln(); у меня никак не получается.

    Буду рад любой помощи )
  • Eraser © (15.03.10 05:15) [1]
    в tcp/ip с т.з. пользователя нет никаких пакетов, используй UDP, а лучше, для начала почитай книжку про сети и протоколы.
  • Дмитрий (15.03.10 07:30) [2]
    Ну а вообще, возможно будет отправить этот пакет ?
  • Сергей М. © (15.03.10 08:26) [3]
    Возможно.
    И проще всего это сделать в блокирующем режиме работы клиентского сокета.
  • NBAH1990 (15.03.10 20:06) [4]
    Почему не использовать Client\Server-Socket ?
  • RGV © (19.03.10 06:15) [5]
    пробуй так:

    procedure TForm1.Button1Click(Sender: TObject);
    var
     buf:array[0..255] of byte;
     hexStr:string;
     i,j:integer;
     Function HextoDec(s:string):integer;
     const
       h = '123456789ABCDEF';
     begin
       result:=0;
       s:=Uppercase(s);
       result:=pos(s[1],h)*16;
       result:=result+pos(s[2],h);
     end;
    begin
     HexStr:=edit1.text;// '0500150C000000000000000000000000'
     j:=0;
     for i:=1 to Length(HexStr) do
       if i mod 2 =1 then
       begin
         buf[j]:=HexToDec(Copy(HexStr,i-1,2));
         inc(j);
       end;
     IdTCPClient1.Host:=HostEdit.text;
     IdTCPClient1.Port:=PortSpinEdit.Value;
     try
       IdTCPClient1.Connect;
       if IdTCPClient1.Connected then
       begin
         IdTCPClient1.WriteBuffer(buf,j);
         IdTCPClient1.Disconnect;
       end;
     except
       on e:Exception do Showmessage(e.Message);
     end;

    end;


    не проверял но должно работать ;)
  • RGV © (19.03.10 06:22) [6]
    сори вот это
    if i mod 2 =1 then

    надо переписать на это
    if i mod 2 =0 then

  • RGV © (19.03.10 06:22) [7]
    сори вот это
    if i mod 2 =1 then

    надо переписать на это
    if i mod 2 =0 then

  • Дмитрий (20.03.10 04:48) [8]
    Ой, ребят, большое спасибо, помогла, правда немного по другому сделал ...

    Но возник ещё вопрос, как сделать проверку на отклик сервера ... ?
    ( ну т.е. я отправил вот этот пакет, и жду пока сервер мне ответит ( пришлёт какой-нибудь пакет), и тогда в ответ, ему следующий пакет )
 
Конференция "Начинающим" » отправка пакета ( TcpClient ) [D7, WinXP]
Есть новые Нет новых   [134439   +39][b:0][p:0.002]