[请教]对方发UDP包给我,我怎样从中截取他的IP地址 ( 积分: 100 )

  • 主题发起人 主题发起人 citydawn
  • 开始时间 开始时间
C

citydawn

Unregistered / Unconfirmed
GUEST, unregistred user!
对方发UDP包给我,我怎样从中截取他的IP地址,用DELPHI的UDP控件可以么?还是要用API?
 
服务端接受事件代码:
AData.Seek(0,0);
SetLength(Str,AData.Size);
AData.Read(Str[1],AData.Size);
edit1.Text:=str;//显示解手的内容
//向发送端返回信息
BackStr:='Recived OK!';
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, BackStr[1], Length(BackStr));
发送端代码:
udpclient.Host:=edit2.Text;
udpclient.Port:=strtoint(edit3.text);
udpclient.Send(edit4.Text);
//接受发送后确认
ReceivedString := udpclient.ReceiveString;
发送端在接收服务端的返回确认字符( BackStr:='Recived OK!';)时,没有反应
是那里的问题哦
 
直接用控件就可以,ABinding.PeerIP不就是了吗
 
我有几点疑问:
我现在从CLIENT端发送一串字符给SERVER端.
CLIENT端是内网的一台电脑,他通过路由器上网,服务端在公网上的一台服务器
例如:CLIENT端发送时用8080端口那么接受端也一定要8080端口,
但是通过路由器上网时,SEVER端接收到的IP和PORT是路由器的,那么我通过一
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, BackStr[1], Length(BackStr));这条语句发送返回信息时里面用的IP和PORT应该是路由器的IP和PORT对么?
但是就是接受不到,我上面的代码有问题么?
 
ABinding.PeerIP, ABinding.PeerPort应该是目的机器的IP和PORT
 
你可以用抓包软件抓一个包看看
 
设置路由器,在转发规则中加入一条记录(你的Client内网IP,端口8080,协议UDP,启用)
 
是不是应该这样发送呢?
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, BackStr[0], Length(BackStr));

按照原路返回数据是可以的,端口映射会在nat上保持一段时间,发到nat相应端口上的数据会被发送给内网的正确端口上。
 
对Socket 不是和熟悉,学习
 
我用以上的代码发送接受没有问题,但不知道为什么在本机反应很慢,我以为代码有错误,
大家可以实验下,另外不用去查路由什么的,你发送时服务端接受的IP和端口是你的内网的网关的,他会映射到你的内网的PC
 
后退
顶部