国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SOCKET通信中的各種ip問題,服務端獲取客戶端ip地址

這篇具有很好參考價值的文章主要介紹了SOCKET通信中的各種ip問題,服務端獲取客戶端ip地址。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??????? 在進行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

??????? 在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模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包