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

如何得到对方IP

楼主#
更多 发布于:2004-02-11 23:37
我UDP写了一个通信软件,我要知道对方的IP,该如何得到,MSDN上说,用Getpeername()可以,前提是必须先建立连接,但UDP是面向无连接的,请指教,我该如何做。谢谢。
lixiangying
驱动牛犊
驱动牛犊
  • 注册日期2002-05-03
  • 最后登录2007-09-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-02-12 19:32
好象应用层不好办。
goson
驱动牛犊
驱动牛犊
  • 注册日期2004-02-08
  • 最后登录2008-02-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-13 08:29
在UDP报文理没IP信息,是不是要用原始套接字写。
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
地板#
发布于:2004-02-13 13:15
UDP也可以connect,这个connect只是绑定对方IP,
connect以后,就可以用send,recv,不一定非要用sendto,recvfrom。
getpeername可以取到这个绑定的IP。
goson
驱动牛犊
驱动牛犊
  • 注册日期2004-02-08
  • 最后登录2008-02-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-02-13 19:09
还是不行,请帮忙看一下。
m_Socket=new DASocket(this);
m_Socket->Create(3550,SOCK_DGRAM);

m_SVSocket=new DASocket(this);
m_SVSocket->Create(3555,SOCK_DGRAM);

m_SVSocket->Bind(3555,"127.0.0.1");
m_SVSocket->Listen(5);

m_Socket->Connect("127.0.0.1",3555);

服务器端不能响应,如果SOCK_DGRAM改为SOCK_STREAM用TCP连接就有响应了。请帮 我看看那里有问题了。
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
5楼#
发布于:2004-02-14 17:30
基本概念不清,UDP本来就不是基于连接的,你在server端怎么听到连接?
仔细想想我前面说得每句话的含义,我没有暗示你server这么写吧?
goson
驱动牛犊
驱动牛犊
  • 注册日期2004-02-08
  • 最后登录2008-02-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-02-16 22:18
小弟不才,还请多指教。

UDP也可以connect,这个connect只是绑定对方IP,
getpeername可以取到这个绑定的IP。
我的理解是connect由客户端发起,getpeername得到的也是客户端帮定的IP,就是connect绑定的对方的IP。

我的情况是这样的CLIENT在内网,server在公网。我要知道的是内网的IP经过NAT后的地址,也就是在SERVER上如何得到这个NAT后的地址。
游客

返回顶部