Главная страница
    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.041 c
1-1154624425
ISK(CMEPTb)
2006-08-03 21:00
2006.09.17
Вставка объектов в текстовый редактор


2-1156485289
yel
2006-08-25 09:54
2006.09.17
База данных


11-1132651033
MTsv DN
2005-11-22 12:17
2006.09.17
Как убрать скролл у ListView...


3-1152705652
MJShvedov
2006-07-12 16:00
2006.09.17
Можно ли редактировать таблицу после объединения?


15-1156517774
БарЛог
2006-08-25 18:56
2006.09.17
1. Что почитать по построению логических схем





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский