Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Вниз

Работа с telnet   Найти похожие ветки 

 
sadel   (2006-04-27 09:22) [0]

Помогите кто-нибудь !!!
Как отправить байт данных = #03 серверу , чтобы он воспринял его как #03 , а не как CTRL-C ?
Иными словами , как сервер заставить воспринимать управляющие коды (0-31 ascii) , как байты данных ?


 
Сергей М. ©   (2006-04-27 09:32) [1]

Покажи сначала свой код отправки ..


 
sadel ©   (2006-04-27 09:46) [2]

Я использую компоненту tncnx
там посылка байта поисходит вот так :
if assigned(socket) then
result:=socket.send(@data,len)
else result:=-1;

echo возвращает все байты , но сервер воспринимает байт  #03 ,как ctrl-c


 
Сергей М. ©   (2006-04-27 10:39) [3]


> сервер воспринимает байт  #03 ,как ctrl-c


Покажи как объявлен data и как ты заполняешь буфер перед вызовом send

p.s.

http://book.itep.ru/4/45/tlnt_453.htm


 
sadel ©   (2006-04-27 12:00) [4]

При отправке байта происходит вот такой процесс

{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
procedure TCustomWSocket.PutDataInSendBuffer(Data : Pointer; Len : Integer);
var
   oBuffer  : TBuffer;
   cWritten : Integer;
   bMore    : Boolean;
begin
   if (Len <= 0) or (Data = nil) then
       exit;

   if FBufList.Count = 0 then begin
       oBuffer := TBuffer.Create(FBufSize);
       FBufList.Add(oBuffer);
   end
   else
       oBuffer := FBufList.Last;

   bMore := TRUE;
   while bMore do begin
       cWritten := oBuffer.Write(Data, Len);
       if cWritten >= Len then
           bMore := FALSE
       else begin
           Len  := Len - cWritten;
           Data := PChar(Data) + cWritten;
           if Len < 0 then
               bMore := FALSE
           else begin
               oBuffer := TBuffer.Create(FBufSize);
               FBufList.Add(oBuffer);
           end;
       end;
   end;
end;

{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
function TBuffer.Write(Data : Pointer; Len : Integer) : Integer;
var
   Remaining : Integer;
   Copied    : Integer;
begin
   Remaining := FBufSize - WrCount;
   if Remaining <= 0 then
       Result := 0
   else begin
       if Len <= Remaining then
           Copied := Len
       else
           Copied := Remaining;
       Move(Data^, (PChar(Buf) + WrCount)^, Copied);
       WrCount := WrCount + Copied;
       Result  := Copied;
   end;
end;

{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *}
{ Return -1 if error, else return number of byte written                    }

function TCustomWSocket.Send(Data : Pointer; Len : Integer) : integer;
begin
   if (FState <> wsConnected) and (FState <> wsSocksConnected) then begin
       WSocket_Synchronized_WSASetLastError(WSAENOTCONN);
       SocketError("Send");
       Result := -1;
       Exit;
   end;

   bAllSent := FALSE;
   if Len <= 0 then
       Result := 0
   else begin
       Result   := Len;
       PutDataInSendBuffer(Data, Len);
   end;

   if bAllSent then
       Exit;

   TryToSend;

   if bAllSent then begin
       { We post a message to fire the FD_WRITE message wich in turn will }
       { fire the OnDataSent event. We cannot fire the event ourself      }
       { because the event handler will eventually call send again.       }
       { Sending the message prevent recursive call and stack overflow.   }
       { The PostMessage function posts (places) a message in a window"s  }
       { message queue and then returns without waiting for the           }
       { corresponding window to process the message. The message will be }
       { seen and routed by Delphi a litle later, when we will be out of  }
       { the send function.                                               }
       PostMessage(Handle,
                   WM_ASYNCSELECT,
                   FHSocket,
                   MakeLong(FD_WRITE, 0));
   end;
end;

{***************************************************}
function  TTnCnx.Send(Data : Pointer; Len : Integer) : integer;
begin
   if Assigned(Socket) then
       Result := Socket.Send(Data, Len)
   else
       Result := -1;
end;

{***************************************}
procedure TForm1.Button4Click(Sender: TObject);
var  j:byte;

begin
J:=3;
tncnx1.send(@J,1);
end;


 
Сергей М. ©   (2006-04-27 12:23) [5]

Ты описание TELNET-протокола внимательно изучил ?
В каком режиме работает TELNET-сервер в момент когда ты ему #3 посылаешь ?


 
sadel ©   (2006-04-27 14:54) [6]

Я не совсем понимаю , как в этой компоненте режимы переключать
там просто есть функции

tncnx.send(data,len) и
tncnx.sendstr(str);

может есть где хороший примерчик телнет-клиента ?


 
Сергей М. ©   (2006-04-27 15:21) [7]


> Я не совсем понимаю


Ты описание протокола изучил или нет ?


 
sadel ©   (2006-04-27 16:10) [8]

В виндовском телнете есть возможность переключать режим
set mode console или
set mode stream

как это программно реализовать ?


 
Сергей М. ©   (2006-04-28 08:34) [9]

см. RFC 856 (Telnet Binary Transmission)


 
sadel ©   (2006-04-28 14:17) [10]

Классно ! Спасибо
необходимо дать команду телнет-серверу IAC WILL TRANSMIT-BINARY
Только после коннекта
idtelnet.connect  (компонент indy)
эта команда воспринимается уже как строка :(
Как же быть ?



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.035 c
4-1147863368
roughneck
2006-05-17 14:56
2006.09.17
InsertMenu с картинкой


15-1156741216
begin...end
2006-08-28 09:00
2006.09.17
28 августа. С Днём рождения!


15-1156827609
begin...end
2006-08-29 09:00
2006.09.17
29 августа. С Днём рождения!


6-1138091589
Makhanev
2006-01-24 11:33
2006.09.17
получение MAC адресов сетевых карт в offline


2-1156415598
XTD
2006-08-24 14:33
2006.09.17
Присвоить знач. при OnCreate form1, form2.label1.Text:=’12’(ошибк





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский