Главная страница
    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.45 MB
Время: 0.009 c
8-63257
Anton2000
2003-09-17 17:31
2004.01.20
TrackBar в проигрывателе музыки


3-62994
stat
2003-12-23 16:56
2004.01.20
record


6-63292
nonameoo
2003-11-17 21:20
2004.01.20
скопировать ехе-шник


1-63202
Aleks_S
2004-01-10 04:09
2004.01.20
Компонент в ячейке TStringGrid?


6-63280
Nikolai_S
2003-11-12 14:48
2004.01.20
mailto:





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский