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

Вниз

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

Наверх




Память: 0.47 MB
Время: 0.025 c
3-63040
Sodom
2003-12-15 14:50
2004.01.20
Работа с базой через PHP скрипт.


3-63004
ikis
2003-12-24 13:53
2004.01.20
dBASE зашифровался!


1-63104
}|{yk
2004-01-08 13:17
2004.01.20
Сохранение настроек фрейма (ini или registry)


1-63243
Iceburger
2004-01-09 09:47
2004.01.20
MDI-приложения


14-63404
VictorT
2003-12-26 14:57
2004.01.20
Надежда умирает последней