
DWORD dwIP;
BYTE btTmp;
CString strTmpIp;
m_IpAddrGetAddress(dwIP);//从控个把获取IP地址
//下面对IP地址进行倒序如果不的话,获取的IP地址字符串就会是倒过来的顺序
//比如:如果你输入19216801话,则IP地址字符串将会是10168192
btTmp = ((BYTE )&dwIP)[0];
((BYTE )&dwIP)[0] = ((BYTE )&dwIP)[3];
((BYTE )&dwIP)[3] = btTmp;
btTmp = ((BYTE )&dwIP)[1];
((BYTE )&dwIP)[1]= ((BYTE )&dwIP)[2];
((BYTE )&dwIP)[2]= btTmp;
strTmpIp =inet_ntoa(((in_addr )&dwIP));//获取IP地址的字符串
#include<WinSock2h>
#pragma comment(lib,"WS2_32")
class CInitSock
{
public:
CInitSock(BYTE minorVer=2,BYTE majorVer=2)
{
WSADATA wsaData;
WORD sockVersion=MAKEWORD(minorVer,majorVer);
if(WSAStartup(sockVersion,&wsaData)!=0)
{
exit(0);
}
}
~CInitSock()
{
WSACleanup();
}
};
WSADATA 这个结构被用来存储 被WSAStartup函数调用后返回的 Windows Sockets 数据。它包含Winsockdll 执行的数据。
WSAStartup 为了在应用程序当 中调用任何一个Winsock API函数,首先第一件事情就是必须通过WSAStartup函数完成对Winsock服务的初始化,因此需要调用WSAStartup函数。使用 Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明 副版本、低位字节指明主版本; *** 作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时, *** 作系统根据请求的Socket版本来搜索相应的 Socket库,然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。
WSACleanup 应用程序或DLL在使用Windows Sockets服务之前必须要进行一次成功的WSAStartup()调 用当它完成了Windows Sockets的使用后,应用程序或DLL必须调用WSACleanup()将其从Windows Sockets的实现中注销,并且该实现释放为应用程序或DLL分配的任何资源任何打开的并已建立连接的SOCK_STREAM类型套接口在调用 WSACleanup()时会重置; 而已经由closesocket()关闭却仍有要发送的悬而未决数据的套接口则不会受影响- 该数据仍要发送 对应于一个任务进行的每一次WSAStartup()调用,必须有一个 WSACleanup()调用只有最后的WSACleanup()做实际的清除工作;前面的调用仅仅将Windows Sockets DLL中的内置引用计数递减一个简单的应用程序为确保WSACleanup()调用了足够的次数,可以在一个循环中不断调用WSACleanup()直 至返回WSANOTINITIALISED
#include"initsockh"
#include<iostream>
using std::cout;
using std::endl;
CInitSock initSock;
void IP()
{
int i;
char szHost[256];
gethostname(szHost,256);
hostent pHost=gethostbyname(szHost);
in_addr addr;
char p=pHost->h_addr_list[0];
memcpy(&addrS_unS_addr,p,pHost->h_length);
char szIp=inet_ntoa(addr);
cout<<szIp<<endl;
}
int main()
{
IP();
system("pause");
return 0;
}
gethostname() 返回本地主机的标准主机名。
int PASCAL FAR gethostname(char FAR name, int namelen);
name: 一个指向将要存放主机名的缓冲区指针。
namelen:缓冲区的长度。
hostent 是host entry的缩写,该结构记录主机的信息,包括主机名、别名、地址类型、地址长度和地址列表。之所以主机的地址是一个列表的形式,原因是当一个主机有多个网络接口时,自然有多个地址。
#define h_addr h_addr_list[0] h_addr_list中的第一地址。
struct hostent {
char h_name; //地址的正式名称
char h_aliases; //空字节-地址的预备名称的指针。
int h_addrtype; //地址类型; 通常是AF_INET。
int h_length; //地址的比特长度。
char h_addr_list; //零字节-主机网络地址指针。网络字节顺序。
};
memcpy
extern void memcpy(void destin, void source, unsigned n);
由source指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。
import javautil;
import javanet;public class getMyIP
{
public static void main(String[] args)
{
String IP = null;
String host = null;
try
{
InetAddress ia = InetAddressgetLocalHost();
host = iagetHostName();//获取计算机名字
IP= iagetHostAddress();//获取IP
}
catch(UnknownHostException e)
{
eprintStackTrace();
}
Systemoutprintln(host);
Systemoutprintln(IP);
}
}
以上就是关于如何获取从程序界面输入的IP地址全部的内容,包括:如何获取从程序界面输入的IP地址、C++获取本机的IP地址。如何实现、怎么编写一个Java程序来获取ip地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)