Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.05;
Скачать: CL | DM;

Вниз

Порт-Маппер на 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
2-1275973756
СержК
2010-06-08 09:09
2010.09.05
Не добавляется информация в БД


15-1276369798
AKE
2010-06-12 23:09
2010.09.05
У кого-нибудь есть код создания...


2-1275568305
madmech
2010-06-03 16:31
2010.09.05
Подвисает программа после после использования колеса мыши


6-1226055140
Поросенок Винни-Пух
2008-11-07 13:52
2010.09.05
особенности tcp/ip при PPP соединении


2-1276126770
студент
2010-06-10 03:39
2010.09.05
drag&drop