-
Доброго времени суток. Возникла задача: написать порт-маппер (с 0-я) на Delphi 10 (Turbo). Использую старые добрые TServerSocket/TClientSocket (которые были в Delphi6). Для тестированя приложения использую Oper'у с настройками прокси на 127.0.0.1 и порт 80. На этом же порте работает TServerSocket. Если устанавливаю его в режим блокировки (stThreadBlocking) - программа наглухо завсает, не помогает ничего! Если ставлю его в асинхоронный режим, то браузер присоеденяется к нему, и буфер для чтения почему-то пустой. Т.е. данныйе он якобы передает, только почему-то не в буфер не в строчный буфер они не поступают...
Реализация вопроса: var buf: array [0..63] of Char;
procedure TForm1.srv1ClientWrite(Sender: TObject; Socket: TCustomWinSocket); begin Application.ProcessMessages; Socket.ReceiveBuf(buf,64); ShowMessage(buf); end;
Итог - в буфере пусто. ReceiveText - дает аналогичный результат!
-
Событие OnClientWrite возникает совсем по другому поводу - оно нужно при передаче, а не при приеме.
Для приема следует обрабатывать OnClientRead.
-
> [0] XeON © (02.11.08 12:43)
вот на Indy OutboundClient := TIdTCPClient.Create(Self);
try
OutboundClient.Host := slLine[1];
OutboundClient.Port := StrToInt(slLine[2]);
OutboundClient.ConnectTimeout := DEFAULT_CONNECTION_TIMEOUT;
OutboundClient.ReadTimeout := DEFAULT_READ_TIMEOUT;
OutboundClient.Connect;
OutboundClient.Socket.UseNagle := False;
OutboundClient.IOHandler.Write(Integer(ROM_PROTOCOL_VERSION));
OutboundClient.IOHandler.Write(Integer(CASCADE_CONNECT));
OutboundClient.IOHandler.Write(Integer(ms.Size));
OutboundClient.IOHandler.Write(ms, ms.Size);
while AContext.Connection.Connected do
begin
AContext.Connection.IOHandler.CheckForDataOnSource(1);
FNetData := AnsiString(AContext.Connection.IOHandler.InputBufferAsString);
if Length(FNetData) > 0 then
begin
OutboundClient.IOHandler.Write(string(FNetData));
end;
OutboundClient.IOHandler.CheckForDataOnSource(1);
FNetData := AnsiString(OutboundClient.IOHandler.InputBufferAsString);
if Length(FNetData) > 0 then
begin
AContext.Connection.IOHandler.Write(string(FNetData));
end;
end;
finally
OutboundClient.Free;
end;
-
Сергей М., СПАСИБО и РЕСПЕКТ! Помог балбесу! :) Теперь всё работает на ура! Супер! Тему думаю, можно закрыть...
|