??????? 在進行socket網絡通信的時候,我們經常需要獲取ip地址,下面介紹一些獲取ip地址的方法。
1.自動獲取本機ip地址
??????? 可以獲取本地所有ip地址,可根據自己需求取出ip。
void getIP()
{
struct ifconf ifconf;
struct ifreq* ifreq;
char buf[512];
ifconf.ifc_len = 512;
ifconf.ifc_buf = buf;
ioctl(sfd, SIOCGIFCONF, &ifconf); //獲取全部接口信息
ifreq = (struct ifreq*)ifconf.ifc_buf;
int i = (ifconf.ifc_len / sizeof(struct ifreq));
for (i; i > 0; i--)
{
if (ifreq->ifr_flags == AF_INET)
{ //for ipv4
printf("name =[%s]\n", ifreq->ifr_name);
printf("local addr = [%s]\n", inet_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr));
ip = inet_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr);
ifreq++;
}
}
}
2.在綁定套接字的時候,要獲取本機ip
????????可用INADDR_ANY,宏INADDR_ANY轉換過來就是0.0.0.0,泛指本機的意思,也就是表示本機的所有IP,因為有些機子不止一塊網卡,多網卡的情況下,這個就表示所有網卡ip地址的意思,也可以自己填入需要的ip,比如上述函數獲得的某一個ip。
sfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sfd < 0)
{
return -1;
}
memset(&ser_addr, 0, sizeof(ser_addr));
ser_addr.sin_family = AF_INET;
ser_addr.sin_addr.s_addr = htonl(INADDR_ANY);//inet_addr(“127.0.0.1”)
//。宏INADDR_ANY轉換過來就是0.0.0.0,泛指本機的意思,也就是表示本機的所有IP,因為有些機子不止一塊網卡,多網卡的情況下,這個就表示所有網卡ip地址的意思
ser_addr.sin_port = htons(5150); //注意網絡序轉換
int flag = 1;
int result = setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, (char*)&flag, sizeof(flag));//端口復用
rre = bind(sfd, (struct sockaddr*)&ser_addr, sizeof(ser_addr));
if (rre < 0)
{
cout << "bind fail" << endl;
printf("%d\n", errno);
return -1;
}
cout << "bind successfully!" << endl;
3.服務端獲取客戶端ip文章來源:http://www.zghlxwxcb.cn/news/detail-530459.html
??????? 在socket通信時,服務器使用recvform函數接收客戶端報文時,客戶端ip信息會包含在服務器端的結構體內。比如下面的例子,以下是服務端接收代碼。inet_ntoa(ser_addr.sin_addr),如果客戶端地址是"192.168.2.2",在服務端打印出來的這個ip就是"192.168.2.2",文章來源地址http://www.zghlxwxcb.cn/news/detail-530459.html
int rre = recvfrom(sfd, &recv_buf, sizeof(recv_buf), 0, (struct sockaddr*)&ser_addr, &len);
if (rre < 0)
{
cout << "recvie fail" << endl;
}
else
{
cout << "recvie successfully!" << endl;
cout<<"toolIP= "<<inet_ntoa(ser_addr.sin_addr) << endl;//客戶端ip
}
到了這里,關于SOCKET通信中的各種ip問題,服務端獲取客戶端ip地址的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!