阅读:4037回复:6
请教如何取得对方IP地址
我UDP写了一个通信软件,我要知道对方的IP,该如何得到,MSDN上说,用Getpeername()可以,前提是必须先建立连接,但UDP是面向无连接的,请指教,我该如何做。谢谢。
|
|
沙发#
发布于:2004-02-18 10:02
你可以用WS2_32.dll的API函数recvform来实现,其中有一个参数就可以得到对方的IP地址
|
|
板凳#
发布于:2004-02-18 10:55
我建议你自己在先看看UDP协议,什么是面向无连接的?通讯是怎么响应的,只要能够和对方主机通讯,一般都知道对方的 IP ,否则怎么通讯,只有IP是唯一的, 你可以用上面所说的函数来得到对方的 IP 。不过一般要先知道对方 IP(或者 DNS 域名) 在和对方直接通讯。
|
|
|
地板#
发布于:2004-02-18 11:36
如果先调用connect()再Getpeername(),那就是成功的。我的情况是这样的,A在内网,B在外网,B要得到A的NAT后 的地址。
如果A->connect(b),A->Getpeername()是成功的,但B的地址我 是知道的,如果要B也进行connect(),前提是知道A的NAT后的地址。 用原始套接字是可以实现的,但只能在2000下运行,我要找一种通用的方法,至少XP 也能运行。 |
|
地下室#
发布于:2004-02-18 16:24
好像windows自定义的套接字只能在2000下面运行,你可以看看msdn
上面说的很详细,除非是Uinx或者Liunx操作系统,我也不知道你说的是不是我说的,Vb我不懂。不过建议你在msdn下面查查winsock。 里面说的很详细! |
|
|
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是通过从监视的端口获取数据后,可以知道数据来源. |
|
6楼#
发布于:2004-02-19 23:26
用RECVFROM还要做什么设置,我试 了下,不能得到IP和PORT,要得到IP必须下的IP协议层,但系统送上来的是UDP包,已经没IP了,我不知道RECVFROM是怎么工作的。
|
|