一个问题请教,关于多个IP的
/***********情况***********/
我遇见这样一种情况
就是我本地机器可能有多个网卡、或者多个IP地址
而我知道令一个IP地址B,也知道他在某个固定端口上开了一个UDP监听
同时在得到数据之后会向我这边的同样的固定端口发送一样的UDP包
/***********问题***********/
我的问题是如何写一个程序
在程序里就可以判断出我有那些IP地址
和我如何知道这些IP地址里哪个是可以和B进行连接的
/***********想法***********/
一个方法是分别以我得所有的IP地址建立该端口的监听程序,获得响应后即可得知
还有就是和PING的程序一样,发送一个ICMP包,就是不知道怎么得到本机的ip地址
如果谁能想出方法的话,希望能把程序贴出来,谢谢!
/******************************************************************/
其中关于获得本机的多IP地址我已看到
程序如下,来自VCKBASE
////////////////////////////////////////////////////////////////
// getip1.cpp
//
// 本程序报告本机上每一块网卡的IP地址
// 命令行编译命令为:
//
// cl getip1.cpp wsock32.lib
//
// 请一定要在环境变量中正确指定LIB库的路径;可以运行vcvars32.bat
//
#include <winsock.h>
#include <wsipx.h>
#include <wsnwlink.h>
#include <stdio.h>
int main()
{
////////////////
// 初始化 Windows sockets API. 要求版本为 version 1.1
//
WORD wVersionRequested = MAKEWORD(1, 1);
WSADATA wsaData;
if (WSAStartup(wVersionRequested, &wsaData)) {
printf("WSAStartup failed %s\n", WSAGetLastError());
return -1;
}
//////////////////
// 获得主机名.
//
char hostname[256];
int res = gethostname(hostname, sizeof(hostname));
if (res != 0) {
printf("Error: %u\n", WSAGetLastError());
return -1;
}
printf("hostname=%s\n", hostname);
////////////////
// 根据主机名获取主机信息.
//
hostent* pHostent = gethostbyname(hostname);
if (pHostent==NULL) {
printf("Error: %u\n", WSAGetLastError());
return -1;
}
//////////////////
// 解析返回的hostent信息.
//
hostent& he = *pHostent;
printf("name=%s\naliases=%s\naddrtype=%d\nlength=%d\n",
he.h_name, he.h_aliases, he.h_addrtype, he.h_length);
sockaddr_in sa;
for (int nAdapter=0; he.h_addr_list[nAdapter]; nAdapter++) {
memcpy ( &sa.sin_addr.s_addr, he.h_addr_list[nAdapter],he.h_length);
// 输出机器的IP地址.
printf("Address: %s\n", inet_ntoa(sa.sin_addr)); // 显示地址串
}
//////////////////
// 终止 Windows sockets API
//
WSACleanup();
return 0;
}