Форум: "Сети";
Текущий архив: 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