分类: 系统运维
2008-05-25 20:23:00
一种可行的方法是(保证网络连通的情况下):
1 不管是否设置了主机名, 只要能访问IP网络都会有IP.
2 建立UDP套接字.
3 进行本地绑定
4 将该地址设置为广播套接字
5 获取绑定的端口, 并使用使用该UDP套接字(或者新建一个UDP套接字)向该端口广播数据(注意是广播地址, 因为在这里我们还不知道本机地址, 但是有限广播地址是知道的).
6 接收数据中的peername中包含本机地址, (为了确保是本机发送的数据, 可以对发送的数据做手脚, 并进行检查).
7 假如已经向外建立了TCP连接就直接调用getpeername就OK了, 没有什么麻烦的了.
8 基本上 得到的数值跟 gethostbyname(NULL) 及 gethostbyname("")返回的值是一个样的。