Форум: "Сети";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];
ВнизПорт мапинг UDP протокола Найти похожие ветки
← →
Dmitriy_R (2003-11-19 07:26) [0]Народ подскажите как реализовать простой порт мапинг по UDP протоколу. Тоесть надо слушать UDP порт и перенаправлять все что на него приходит на другую машину и другой порт.
Заранее спасибо.
← →
RedKat (2003-11-19 10:22) [1]С одной стороны компонент-сервер слушающий нужный тебе UDP порт, при приеме блока он передает его компоненту-клиенту (в этом-же приложении) кот. передает его дальше на нужную машину и порт.
← →
Dmitriy_R (2003-11-19 11:37) [2]Не получается :-(
Вот мой исходный код, может кто подскажет где ошибка.
unit UDPServerMain;
interface
uses
{$IFDEF Linux}
QGraphics, QControls, QForms, QDialogs, QStdCtrls,
{$ELSE}
windows, messages, graphics, controls, forms, dialogs, IdWinsock, stdctrls,
{$ENDIF}
SysUtils, Classes, IdBaseComponent, IdAntiFreezeBase, IdAntiFreeze,
IdComponent, IdUDPBase, IdUDPClient, IdStack, IdUDPServer, IdSocketHandle;
type
TUDPMainForm = class(TForm)
UDPServer: TIdUDPServer;
UDPAntiFreeze: TIdAntiFreeze;
UDPMemo: TMemo;
UDPClient: TIdUDPClient;
procedure FormCreate(Sender: TObject);
procedure UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
private
{ Private declarations }
public
{ Public declarations }
end;
var
UDPMainForm: TUDPMainForm;
implementation
const
HOSTNAMELENGTH = 80;
RECIEVETIMEOUT = 5000; // milliseconds
{$IFDEF MSWINDOWS}{$R *.dfm}{$ELSE}{$R *.xfm}{$ENDIF}
procedure TUDPMainForm.FormCreate(Sender: TObject);
begin
UDPServer.Active := True;
UDPClient.ReceiveTimeout := RECIEVETIMEOUT;
end;
procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);
var
DataStringStream: TStringStream;
s: String;
ReceivedString: String;
begin
DataStringStream := TStringStream.Create("");
try
DataStringStream.CopyFrom(AData, AData.Size);
UDPMemo.Lines.Add("Сервер принял :" + DataStringStream.DataString + " from " + ABinding.PeerIP + " on port " + IntToStr(ABinding.PeerPort));
UDPClient.Send(DataStringStream.DataString);
UDPMemo.Lines.Add("Клиент отправил :" + DataStringStream.DataString);
ReceivedString := UDPClient.ReceiveString();
UDPMemo.Lines.Add("Клиент принял :" + ReceivedString);
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, ReceivedString, Length(ReceivedString));
UDPMemo.Lines.Add("Сервер отправил :" + ReceivedString + " -> " + IntToStr(Length(ReceivedString)));
finally
DataStringStream.Free;
end;
end;
end.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.092 c