想请教一下无忌大哥关于ICS的UDP控件的问题 (100分)

  • 主题发起人 主题发起人 不困
  • 开始时间 开始时间

不困

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多分了,不要嫌少啊。。
 
若嫌不够,将来赚了分再以报答。。
请各位帮帮我啊。。
 
呵呵,公网的UDP包只能发到你的网关上.不可能回到你的内网机器上.
解决的办法是在网关上运行一个转发UDP包的程序,原理也简单,就把收到的包再发出去,并伪装
一下IP.这个程序到是有,不过这个程序还真就是张无忌写的.你算找对了人.
代码我就不便贴了.你等等他吧.
 
这样???
那这个软件的功能岂不是大大的打了折扣嘛。。
为什么QQ没有在什么网关上建立程序呢???还不是一样的可以正常工作??
不解了。。
 
等得我俩眼昏花~~~急啊。。
大富翁上面倒是不少,但有结论的我还没找到。。
拜托啦各位。。。
 
网址转换或用Socks5代理
 
网址转换??
这要怎样实现呢???
有资料可以参考吗?
 
你根本没有必要调用connect方法,帮定一个接口之后直接发送UDP包就可以了,
再看看端口是否是隐射过的!
 
用我写的控件试试,我的控件类TClientSocket,发送数据用SendBuf和SendText就可以了
http://61.132.118.185:8080/dispdocnew.php?id=4228
 
啊~~苍天有眼不负有心人!
这两天把帖子提前了至少二三十次~~~终于让大哥您给看到了!!!
我这就回家测试去了!!感激不尽!!!
 
不行不行,你的控件无法使用。。
我是D6,不可以吗?
编译不通过:TSHUDPSocket未定义,
要修改什么吗?
 
不会把?你看那行代码出了问题,我给别人使用一起正常
 
就是在声明的时候: SHUDPSocket1: TSHUDPSocket;
这里就会出错阿。。。奇怪了。。
 
我把它卸掉重新装了一遍就好了,嘿!
感谢!
 
后退
顶部