delphi Indy10 udp如何向外网发数据
delphi Indy10 udp怎么向外网发数据
网上找了很多,真心不知道该怎么弄,比如说我想在局域网内的机器发一个‘hello’给外网的服务器,
发送端跟接收端怎么弄;麻烦给个例子
------解决方案--------------------
server.dpr
client.dpr
网上找了很多,真心不知道该怎么弄,比如说我想在局域网内的机器发一个‘hello’给外网的服务器,
发送端跟接收端怎么弄;麻烦给个例子
------解决方案--------------------
server.dpr
program server;
{$APPTYPE CONSOLE}
uses
SysUtils, IdSocketHandle, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer, IdGlobal;
type
TServer = class
private
FUdpServer: TIdUDPServer;
procedure OnRead(AThread: TIdUDPListenerThread; AData: TIdBytes; ABinding: TIdSocketHandle);
public
constructor Create(const port: Word);
destructor Destroy; override;
end;
{ TServer }
constructor TServer.Create(const port: Word);
begin
FUdpServer := TIdUDPServer.Create;
with FUdpServer do
begin
ThreadedEvent := True;
DefaultPort := port;
OnUDPRead := OnRead;
Active := True;
end;
end;
destructor TServer.Destroy;
begin
FUdpServer.Free;
end;
procedure TServer.OnRead(AThread: TIdUDPListenerThread; AData: TIdBytes; ABinding: TIdSocketHandle);
var
content: string;
begin
SetLength(content, Length(AData));
Move(AData[0], content[1], Length(AData));
Writeln(Format('[%s] %s', [ABinding.PeerIP, content]));
end;
var
ser: TServer;
begin
ser := TServer.Create(9999);
try
Readln;
finally
ser.Free;
end;
end.
client.dpr
program client;
{$APPTYPE CONSOLE}
uses
IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient;
var
cli: TIdUDPClient;
begin
cli := TIdUDPClient.Create;
try
//默认测试为127.0.0.1:9999,自己修改外网IP及端口,记得端口(UDP)要开放
cli.Send('127.0.0.1', 9999, 'hello indy!');
finally
cli.Free;
end;
end.