Форум: "Сети";
Текущий архив: 2010.09.05;
Скачать: [xml.tar.bz2];
ВнизПорт-Маппер на Delphi 10 (Turbo) Найти похожие ветки
← →
XeON © (2008-11-02 12:43) [0]Доброго времени суток. Возникла задача: написать порт-маппер (с 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 - дает аналогичный результат!
← →
Сергей М. © (2008-11-02 21:31) [1]Событие OnClientWrite возникает совсем по другому поводу - оно нужно при передаче, а не при приеме.
Для приема следует обрабатывать OnClientRead.
← →
Eraser © (2008-11-03 01:31) [2]> [0] XeON © (02.11.08 12:43)
вот на Indy// Организуем Port Mapping.
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);
// Механизм Port Mapping"а.
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);
//OutboundClient.IOHandler.InputBuffer.
FNetData := AnsiString(OutboundClient.IOHandler.InputBufferAsString);
if Length(FNetData) > 0 then
begin
AContext.Connection.IOHandler.Write(string(FNetData));
end;
end;
finally
OutboundClient.Free;
end;
← →
XeON © (2008-11-03 11:00) [3]Сергей М., СПАСИБО и РЕСПЕКТ! Помог балбесу! :) Теперь всё работает на ура! Супер! Тему думаю, можно закрыть...
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2010.09.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c