不
不困
Unregistered / Unconfirmed
GUEST, unregistred user!
现在我在局域网内的机器向有真实IP的公网内的机器发送UDP包,公网内机器可以接收到,
但无法返回发送。。代码如下:
procedure TForm1.FormCreate(Sender: TObject);//监听9055端口
begin
RSocket.Proto := 'udp';
rsocket.LocalPort := '9055';
rsocket.Port := '9055';
RSocket.Addr := '0.0.0.0';
RSocket.Listen;
end;
//发送UDP信息
procedure TForm1.Button1Click(Sender: TObject);
var ssocket:twsocket;
tmpstr:string;
begin
TmpStr :='ONL';
ssocket:=TWSocket.Create(nil);
ssocket.BufSize:=2048;
SSocket.Proto := 'udp';
Ssocket.LocalPort := '9056';
SSocket.Addr := edit1.Text;
SSocket.Port:= edit2.Text;
SSocket.Connect;
SSocket.SendStr(tmpstr);
SSocket.Close;
ssocket.Free;
end;
//监听触发事件
procedure TForm1.RSocketDataAvailable(Sender: TObject; Error: Word);
var
Buffer : array [0..1023] of char;
Len : Integer;
Src : TSockAddrIn;
SrcLen : Integer;
begin
SrcLen := SizeOf(Src);
Len := RSocket.ReceiveFrom(@Buffer, SizeOf(Buffer), Src, SrcLen);
if Len >= 0 then
begin
Buffer[Len] := #0;
Memo1.Lines.Add(StrPas(Buffer));
Memo1.Lines.Add(inttostr(ntohs(Src.sin_port)));
Memo1.Lines.Add(StrPas(inet_ntoa(Src.sin_addr)));
end;
end;
问题就是,在公网上的机器接收到的IP是正确的,但端口却还是发送的端口,即9056,
好像没有经过什么网关端口映射啊,而且就算我取到了映射端口,发送9055这个端口能
够接收到吗? 还是我取得方法不对??不吝赐教。。
另外,GetXPort这个函数有什么用?
谢谢。。就100多分了,不要嫌少啊。。
但无法返回发送。。代码如下:
procedure TForm1.FormCreate(Sender: TObject);//监听9055端口
begin
RSocket.Proto := 'udp';
rsocket.LocalPort := '9055';
rsocket.Port := '9055';
RSocket.Addr := '0.0.0.0';
RSocket.Listen;
end;
//发送UDP信息
procedure TForm1.Button1Click(Sender: TObject);
var ssocket:twsocket;
tmpstr:string;
begin
TmpStr :='ONL';
ssocket:=TWSocket.Create(nil);
ssocket.BufSize:=2048;
SSocket.Proto := 'udp';
Ssocket.LocalPort := '9056';
SSocket.Addr := edit1.Text;
SSocket.Port:= edit2.Text;
SSocket.Connect;
SSocket.SendStr(tmpstr);
SSocket.Close;
ssocket.Free;
end;
//监听触发事件
procedure TForm1.RSocketDataAvailable(Sender: TObject; Error: Word);
var
Buffer : array [0..1023] of char;
Len : Integer;
Src : TSockAddrIn;
SrcLen : Integer;
begin
SrcLen := SizeOf(Src);
Len := RSocket.ReceiveFrom(@Buffer, SizeOf(Buffer), Src, SrcLen);
if Len >= 0 then
begin
Buffer[Len] := #0;
Memo1.Lines.Add(StrPas(Buffer));
Memo1.Lines.Add(inttostr(ntohs(Src.sin_port)));
Memo1.Lines.Add(StrPas(inet_ntoa(Src.sin_addr)));
end;
end;
问题就是,在公网上的机器接收到的IP是正确的,但端口却还是发送的端口,即9056,
好像没有经过什么网关端口映射啊,而且就算我取到了映射端口,发送9055这个端口能
够接收到吗? 还是我取得方法不对??不吝赐教。。
另外,GetXPort这个函数有什么用?
谢谢。。就100多分了,不要嫌少啊。。