社区
C++ Builder
帖子详情
请教在bcb中如何获取本机的IP地址?
wwwunix
2000-08-28 10:39:00
...全文
1013
8
打赏
收藏
请教在bcb中如何获取本机的IP地址?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BCB
2000-12-26
打赏
举报
回复
若有多个地址,下面的程序可一一列具出,可自行改成DELPHI:
#include "winsock.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WSAData wsaData;
WSAStartup(MAKEWORD(2,0),&wsaData); //初始化WINSOCK调用
char HostName[64]; //存放本主机名
HOSTENT *lpHostEnt;
gethostname(HostName,sizeof(HostName)); //利用得到的主机名去获得主机结构
Edit1->Text=HostName;
lpHostEnt=gethostbyname(HostName); //利用主机名去取主机结构
for (int i=0; lpHostEnt->h_addr_list[i]!=NULL; i++)
{
IN_ADDR *p=(IN_ADDR *)(lpHostEnt->h_addr_list[i]);
String IP=inet_ntoa(*p);
Memo1->Lines->Add(IP);
}
WSACleanup(); //释放WINSOCK调用
}
BCB
2000-12-22
打赏
举报
回复
#include "winsock.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WSAData wsaData;
WSAStartup(MAKEWORD(2,0),&wsaData); //初始化WINSOCK调用
char HostName[64]; //存放本主机名
HOSTENT *lpHostEnt;
gethostname(HostName,sizeof(HostName)); //利用得到的主机名去获得主机结构
Edit1->Text=HostName;
lpHostEnt=gethostbyname(HostName); //利用主机名去取主机结构
for (int i=0; lpHostEnt->h_addr_list[i]!=NULL; i++)
{
IN_ADDR *p=(IN_ADDR *)(lpHostEnt->h_addr_list[i]);
String IP=inet_ntoa(*p);
Memo1->Lines->Add(IP);
}
WSACleanup(); //释放WINSOCK调用
}
BCB
2000-12-22
打赏
举报
回复
TCLientSocket 与 TServerSocket
若未连接过,LoalAddress 是空的,
这不行,多个IP也无能为力!
BCB
2000-12-22
打赏
举报
回复
初始化不能省,稍改后,将所有IP都能显示在Memo1
#include "winsock.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WSAData wsaData;
WSAStartup(MAKEWORD(2,0),&wsaData); //初始化WINSOCK调用
char HostName[80]; //存放本主机名
LPHOSTENT lpHostEnt;
gethostname(HostName,sizeof(HostName)); //利用得到的主机名去获得主机结构
Edit1->Text=HostName;
lpHostEnt=gethostbyname(HostName); //利用主机名去取主机结构
for (int i=0; lpHostEnt->h_addr_list[i]!=0; i++)
{
struct in_addr *p=(struct in_addr *)(lpHostEnt->h_addr_list[i]);
String IP=inet_ntoa(*p);
Memo1->Lines->Add(IP);
}
WSACleanup(); //释放WINSOCK调用
}
BCB
2000-12-22
打赏
举报
回复
Slash:
可能要加个#include "winsock.h"或winsock2.h
sIPAddress = inet_ntoa(*(struct in_addr*)pHost->h_addr_list[0]);
这一句通不过
FengSC
2000-08-28
打赏
举报
回复
如果你使用的是TServerSocket或TClientSocket;
它们的Socket属性中有一个LocalAddress属性是本地地址。
例:Label1->Caption = ServerSocket1->Socket->LocalAddress;
Slash
2000-08-28
打赏
举报
回复
太麻烦了,看下面的
// Get host address
char Buffer[64];
HOSTENT FAR *pHost;
AnsiString sIPAddress;
gethostname(Buffer, 64);
pHost = gethostbyname(Buffer);
sIPAddress = inet_ntoa(*(struct in_addr*)pHost->h_addr_list[0]);
// If have many ip address, then
// look h_addr_list[1], etc, until encounter a NULL pointer
Wingsun
2000-08-28
打赏
举报
回复
如下代码:
WSAData wsaData;
if (WSAStartup(MAKEWORD(2,0),&wsaData)!=0)
{ //初始化WINSOCK调用
MessageBox(NULL,"Wrong WinSock Version","Error",MB_OK);
return ;
}
char HostName[80];
LPHOSTENT lpHostEnt;
struct in_addr addr[2];
//本程序假设主机不是多宿主机,即最多只有
// 一块网卡和一个动态IP
for (int i=0; i< 2; i++)
{
memset(&addr[i],0,sizeof(in_addr));
//对in_addr结构清0,以利后面填写
}
if (gethostname(HostName,sizeof(HostName))==SOCKET_ERROR)
{ // 得到本主机名
MessageBox(NULL,"Can't getting local host name.","Error",MB_OK);
return ;
}
Label1->Caption=HostName;
lpHostEnt=gethostbyname(HostName);//利用得到的主机名去获得主机结构
if (!lpHostEnt)
{
MessageBox(NULL,"Yow! Bad host lookup.","Error",MB_OK);
return ;
}
for (int i=0; lpHostEnt->h_addr_list[i]!=0; i++)
//从主机地址表中得到IP地址
{
memcpy(&addr[i],lpHostEnt->h_addr_list[i],sizeof(in_addr));
}
Label2->Caption=inet_ntoa(addr[0]);
Label3->Caption=inet_ntoa(addr[1]);
WSACleanup(); //释放WINSOCK调用
墙裂推荐!看完全面掌握,最详细的 Docker 学习笔记总结(2021最新版)
开发者和系统管理员在笔记本上编译测试通过的容器可以批量地在生产环境
中
部署,包括 VMs(虚拟机)、bare metal、OpenStack 集群、云端、数据
中
心和其他的基础应用平台。容器是完全使用沙箱机制,相互之间不会有任何...
如何模拟输入用户名、密码来访问网络邻居
基本原理----在Windows 环境下,应用程序使用Windows 网络函数(WNet)来实现网络功能 而不用关心网络的供应商及具体实现,因为WNet 函数是独立于网络的。 ----Wnet 函数主要有:WnetAddConnection , ...
写给想当程序员的朋友!
原文地址:写给想当程序员的朋友!作者:岩之GIS(一) 文章由来及个人经历 我是一名计算机专业的本科毕业生,毕业已经1年多了。毕业后从事的是软件编程工作,经常有其他专业的朋友想从事软件编程工作,向我
请教
如何...
你适合当程序员吗,你知道编程序是怎么回事吗?
(一) 你适合当程序员吗,你知道编程序是怎么回事吗? 1、 程序员意味着要编程序。(如果你仅仅想得到一份...(说坦白点就是,在你没有找到乐趣以前,它很枯燥) 3、你有对新技术追求的热情吗?你有刨根问底
怎么拦截系统函数
) 在Dos下,我们可以拦截
中
断,用自己的处理替换系统
中
断,然后调用原来的
中
断,在Windows
中
,没有了
中
断,只有函数,那么我们如何来拦截系统的函数,然后我们的函数又调用原来的系统函数呢?比如说系统有一个...
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章