Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
14-63379
ИдиотЪ
2003-12-29 09:26
2004.01.20
как бороться с ломателями ICQ ?


1-63107
OlegGashev
2004-01-08 08:00
2004.01.20
Caption колонки в listview


1-63142
Mihey
2004-01-06 21:41
2004.01.20
Сложный перенос слов


14-63375
Ega23
2003-12-29 12:35
2004.01.20
Кстати об играх:


1-63126
Женя
2004-01-08 00:43
2004.01.20
Преобразование String в PAnsiChar





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский