goson
驱动牛犊
驱动牛犊
  • 注册日期2004-02-08
  • 最后登录2008-02-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:4037回复:6

请教如何取得对方IP地址

楼主#
更多 发布于:2004-02-11 23:34
我UDP写了一个通信软件,我要知道对方的IP,该如何得到,MSDN上说,用Getpeername()可以,前提是必须先建立连接,但UDP是面向无连接的,请指教,我该如何做。谢谢。
lyd961418
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2006-05-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-02-18 10:02
你可以用WS2_32.dll的API函数recvform来实现,其中有一个参数就可以得到对方的IP地址
author22
驱动小牛
驱动小牛
  • 注册日期2003-08-20
  • 最后登录2018-04-07
  • 粉丝0
  • 关注0
  • 积分391分
  • 威望85点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-18 10:55
我建议你自己在先看看UDP协议,什么是面向无连接的?通讯是怎么响应的,只要能够和对方主机通讯,一般都知道对方的 IP ,否则怎么通讯,只有IP是唯一的, 你可以用上面所说的函数来得到对方的 IP 。不过一般要先知道对方 IP(或者 DNS 域名) 在和对方直接通讯。
我的Vc代码仓库:[url]http://sh.b211.net[/url]
goson
驱动牛犊
驱动牛犊
  • 注册日期2004-02-08
  • 最后登录2008-02-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-02-18 11:36
如果先调用connect()再Getpeername(),那就是成功的。我的情况是这样的,A在内网,B在外网,B要得到A的NAT后 的地址。
如果A->connect(b),A->Getpeername()是成功的,但B的地址我 是知道的,如果要B也进行connect(),前提是知道A的NAT后的地址。
用原始套接字是可以实现的,但只能在2000下运行,我要找一种通用的方法,至少XP 也能运行。
author22
驱动小牛
驱动小牛
  • 注册日期2003-08-20
  • 最后登录2018-04-07
  • 粉丝0
  • 关注0
  • 积分391分
  • 威望85点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-02-18 16:24
好像windows自定义的套接字只能在2000下面运行,你可以看看msdn
上面说的很详细,除非是Uinx或者Liunx操作系统,我也不知道你说的是不是我说的,Vb我不懂。不过建议你在msdn下面查查winsock。
里面说的很详细!
我的Vc代码仓库:[url]http://sh.b211.net[/url]
baichiyun
驱动牛犊
驱动牛犊
  • 注册日期2002-07-24
  • 最后登录2004-02-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-02-19 15:00
我想你要跟具体某个人通讯,必须知道别人的相关信息吧
如果是局域网,可以通过他的计算机名来获取其地址,可用如下方法:
int  MGetlocalIp(char *buf)  
{
   struct  hostent  *phost;
   char hostname[100];
   gethostname(hostname,100);
   int ree=GetLastError();
   phost  =  gethostbyname(hostname);
   char  **iplist;
   iplist  =  phost->h_addr_list;
   while( * iplist)
   {
     strcpy(buf,inet_ntoa(*(struct in_addr*)*iplist));
     iplist++;
   }
    return 1;
}
如果是外网的话就不一定了

用RECVFROM是通过从监视的端口获取数据后,可以知道数据来源.
goson
驱动牛犊
驱动牛犊
  • 注册日期2004-02-08
  • 最后登录2008-02-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-02-19 23:26
用RECVFROM还要做什么设置,我试 了下,不能得到IP和PORT,要得到IP必须下的IP协议层,但系统送上来的是UDP包,已经没IP了,我不知道RECVFROM是怎么工作的。
游客

返回顶部