<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SOCKADDR_IN</title>
	<atom:link href="https://www.aitaocui.cn/tag/224569/feed" rel="self" type="application/rss+xml" />
	<link>https://www.aitaocui.cn</link>
	<description>翡翠玉石爱好者聚集地</description>
	<lastBuildDate>Sat, 26 Nov 2022 16:36:06 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://www.aitaocui.cn/wp-content/uploads/2022/11/taocui.png</url>
	<title>SOCKADDR_IN</title>
	<link>https://www.aitaocui.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>SOCKADDR_IN(网络编程结构)</title>
		<link>https://www.aitaocui.cn/article/336261.html</link>
					<comments>https://www.aitaocui.cn/article/336261.html#respond</comments>
		
		<dc:creator><![CDATA[高坚果]]></dc:creator>
		<pubDate>Sat, 26 Nov 2022 16:36:06 +0000</pubDate>
				<category><![CDATA[知识]]></category>
		<category><![CDATA[SOCKADDR_IN]]></category>
		<guid isPermaLink="false">https://www.aitaocui.cn/?p=336261</guid>

					<description><![CDATA[在windows/linux下有下面结构：sockaddr结构。 基本结构 在windows/linux下有下面结构： sockaddr结构 1 2 3 4 structsocka...]]></description>
										<content:encoded><![CDATA[</p>
<article>
<p>在windows/linux下有下面结构：sockaddr结构。</p>
</article>
<article>
<h1>基本结构</h1>
<p>在windows/linux下有下面结构：</p>
<p>sockaddr结构</p>
<table style="width:18px">
<colgroup>
<col width="9" />
<col width="9" /></colgroup>
<tr style="height:33px"></tr>
<tr>
<td colspan="1" rowspan="1" style="border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-top:1px solid #000000">
<p>1 </p>
</p>
<p>2 </p>
</p>
<p>3 </p>
</p>
<p>4 </p>
</p>
</td>
<td colspan="1" rowspan="1" style="border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-top:1px solid #000000">
<p>structsockaddr{ </p>
</p>
<p>unsignedshortsa_family;/*addressfamily,AF_xxx*/ </p>
</p>
<p>charsa_data[14];/*14bytesofprotocoladdress*/ </p>
</p>
<p>}; </p>
</p>
</td>
</tr>
<tr style="height:33px"></tr>
</table>
<p>sa_family是地址家族，一般都是“AF_xxx”的形式。通常大多用的是都是AF_INET,代表TCP/IP协议族。</p>
<p>sa_data是14字节协议地址。</p>
<p>此数据结构用做bind、connect、recvfrom、sendto等函数的参数，指明地址信息。但一般编程中并不直接针对此数据结构操作，而是使用另一个与sockaddr等价的数据结构</p>
<p>sockaddr_in（在netinet/in.h中定义）：</p>
<table style="width:18px">
<colgroup>
<col width="9" />
<col width="9" /></colgroup>
<tr style="height:33px"></tr>
<tr>
<td colspan="1" rowspan="1" style="border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-top:1px solid #000000">
<p>1 </p>
</p>
<p>2 </p>
</p>
<p>3 </p>
</p>
<p>4 </p>
</p>
<p>5 </p>
</p>
<p>6 </p>
</p>
</td>
<td colspan="1" rowspan="1" style="border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-top:1px solid #000000">
<p>structsockaddr_in{ </p>
</p>
<p>shortsin_family;/*Addressfamily一般来说AF_INET（地址族）PF_INET（协议族）*/ </p>
</p>
<p>unsignedshortsin_port;/*Portnumber(必须要采用 网络数据 格式,普通数字可以用htons()函数转换成网络数据格式的数字)*/ </p>
</p>
<p>structin_addrsin_addr;/*Internetaddress*/ </p>
</p>
<p>unsignedcharsin_zero[8];/*Samesizeasstructsockaddr没有实际意义,只是为了　跟SOCKADDR结构在内存中对齐*/ </p>
</p>
<p>}; </p>
</p>
</td>
</tr>
<tr style="height:33px"></tr>
</table>
<p>（在ws2def.h中定义）：</p>
<table style="width:18px">
<colgroup>
<col width="9" />
<col width="9" /></colgroup>
<tr style="height:33px"></tr>
<tr>
<td colspan="1" rowspan="1" style="border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-top:1px solid #000000">
<p>1 </p>
</p>
<p>2 </p>
</p>
<p>3 </p>
</p>
<p>4 </p>
</p>
<p>5 </p>
</p>
<p>6 </p>
</p>
<p>7 </p>
</p>
<p>8 </p>
</p>
<p>9 </p>
</p>
<p>10 </p>
</p>
</td>
<td colspan="1" rowspan="1" style="border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-top:1px solid #000000">
<p>structsockaddr_in{ </p>
</p>
<p>#if(_WIN32_WINNT&lt;0x0600)    </p>
</p>
<p>shortsin_family; </p>
</p>
<p># else //(_WIN32_WINNT&lt;0x0600)    </p>
</p>
<p>ADDRESS_FAMILYsin_family; </p>
</p>
<p>#endif//(_WIN32_WINNT&lt;0x0600)    </p>
</p>
<p>USHORTsin_port; </p>
</p>
<p>IN_ADDRsin_addr; </p>
</p>
<p>CHARsin_zero[8]; </p>
</p>
<p>} </p>
</p>
</td>
</tr>
<tr style="height:33px"></tr>
</table>
<p>在linux下：</p>
<p>in_addr结构</p>
<table style="width:18px">
<colgroup>
<col width="9" />
<col width="9" /></colgroup>
<tr style="height:33px"></tr>
<tr>
<td colspan="1" rowspan="1" style="border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-top:1px solid #000000">
<p>1 </p>
</p>
<p>2 </p>
</p>
<p>3 </p>
</p>
</td>
<td colspan="1" rowspan="1" style="border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-top:1px solid #000000">
<p>typedefstructin_addr{ </p>
</p>
<p>unsignedlongs_addr; </p>
</p>
<p>}; </p>
</p>
</td>
</tr>
<tr style="height:33px"></tr>
</table>
<p>在windows下：</p>
<table style="width:18px">
<colgroup>
<col width="9" />
<col width="9" /></colgroup>
<tr style="height:33px"></tr>
<tr>
<td colspan="1" rowspan="1" style="border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-top:1px solid #000000">
<p>1 </p>
</p>
<p>2 </p>
</p>
<p>3 </p>
</p>
<p>4 </p>
</p>
<p>5 </p>
</p>
<p>6 </p>
</p>
<p>7 </p>
</p>
</td>
<td colspan="1" rowspan="1" style="border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-top:1px solid #000000">
<p>typedefstructin_addr{ </p>
</p>
<p>union { </p>
</p>
<p>struct{unsignedchars_b1,s_b2,s_b3,s_b4;}S_un_b; </p>
</p>
<p>struct{unsignedshorts_w1,s_w2;}S_un_w; </p>
</p>
<p>unsignedlongS_addr; </p>
</p>
<p>}S_un; </p>
</p>
<p>}IN_ADDR; </p>
</p>
</td>
</tr>
<tr style="height:33px"></tr>
</table>
<p>更多参考:in_addr</p>
<h1>参数说明</h1>
<p>sin_family指代协议族，在socket编程中只能是AF_INET</p>
<p>sin_port存储端口号（使用网络字节顺序），在linux下，端口号的范围0~65535,同时0~1024范围的端口号已经被系统使用或保留。</p>
<p>sin_addr存储IP地址，使用in_addr这个数据结构</p>
<p>sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。</p>
<p>s_addr按照网络字节顺序存储IP地址</p>
<p>sockaddr_in和sockaddr是并列的结构，指向sockaddr_in的结构体的指针也可以指向</p>
<p>sockaddr的结构体，并代替它。也就是说，你可以使用sockaddr_in建立你所需要的信息,</p>
<p>然后用memset函数初始化就可以了memset((char*)&amp;mysock,sizeof(mysock));//初始化</p>
<p>sockaddr_in mysock;</p>
<p>memset((char*)&amp;mysock,sizeof(mysock));</p>
<p>mysock.sin_family=AF_INET;</p>
<p>mysock.sin_port=htons(1234);//1234是端口号</p>
<p>mysock.sin_addr.s_addr=inet_addr(&quot;192.168.0.1&quot;);</p>
<p>相关函数：inet_addr, inet_aton, inet_ntoa, htonl, htons， MAKEWORD， WSASocket, WSAHtons……</p>
<h1>经典案例</h1>
<p>服务端：</p>
<table style="width:18px">
<colgroup>
<col width="9" />
<col width="9" /></colgroup>
<tr style="height:33px"></tr>
<tr>
<td colspan="1" rowspan="1" style="border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-top:1px solid #000000">
<p>1 </p>
</p>
<p>2 </p>
</p>
<p>3 </p>
</p>
<p>4 </p>
</p>
<p>5 </p>
</p>
<p>6 </p>
</p>
<p>7 </p>
</p>
<p>8 </p>
</p>
<p>9 </p>
</p>
<p>10 </p>
</p>
<p>11 </p>
</p>
<p>12 </p>
</p>
<p>13 </p>
</p>
<p>14 </p>
</p>
<p>15 </p>
</p>
<p>16 </p>
</p>
<p>17 </p>
</p>
<p>18 </p>
</p>
<p>19 </p>
</p>
<p>20 </p>
</p>
<p>21 </p>
</p>
<p>22 </p>
</p>
</td>
<td colspan="1" rowspan="1" style="border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-top:1px solid #000000">
<p>intmain() </p>
</p>
<p>{ </p>
</p>
<p>//创建socket </p>
</p>
<p>intsockfd=socket(PF_LOCAL,SOCK_DGRAM,0); </p>
</p>
<p>if(sockfd==-1) </p>
</p>
<p>perror(&quot;创建socket失败&quot;), exit (-1); </p>
</p>
<p>//准备通信地址 </p>
</p>
<p>structsockaddr_unaddr; </p>
</p>
<p>addr.sun_family=PF_UNIX; </p>
</p>
<p>strcpy(addr.sun_path,&quot;a.sock&quot;); </p>
</p>
<p>//绑定 </p>
</p>
<p>int res =bind(sockfd,(structsockaddr*)&amp;addr,sizeof(addr));    </p>
</p>
<p>if(res==-1)perror(&quot;绑定失败&quot;),exit(-1); </p>
</p>
<p>printf(&quot;绑定成功//n&quot;); </p>
</p>
<p>//通信(用读写文件方式) </p>
</p>
<p>charbuf[100]={}; </p>
</p>
<p>read (sockfd,buf,sizeof(buf)); </p>
</p>
<p>printf(&quot;收到信息:%s//n&quot;,buf); </p>
</p>
<p>//关闭socket </p>
</p>
<p>close (sockfd); </p>
</p>
<p>return0; </p>
</p>
<p>} </p>
</p>
</td>
</tr>
<tr style="height:33px"></tr>
</table>
<p>客户端：</p>
<table style="width:18px">
<colgroup>
<col width="9" />
<col width="9" /></colgroup>
<tr style="height:33px"></tr>
<tr>
<td colspan="1" rowspan="1" style="border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-top:1px solid #000000">
<p>1 </p>
</p>
<p>2 </p>
</p>
<p>3 </p>
</p>
<p>4 </p>
</p>
<p>5 </p>
</p>
<p>6 </p>
</p>
<p>7 </p>
</p>
<p>8 </p>
</p>
<p>9 </p>
</p>
<p>10 </p>
</p>
<p>11 </p>
</p>
<p>12 </p>
</p>
<p>13 </p>
</p>
<p>14 </p>
</p>
<p>15 </p>
</p>
<p>16 </p>
</p>
</td>
<td colspan="1" rowspan="1" style="border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;border-top:1px solid #000000">
<p>intmain() </p>
</p>
<p>{ </p>
</p>
<p>intsockfd=socket(PF_LOCAL,SOCK_DGRAM,0); </p>
</p>
<p>if(sockfd==-1) </p>
</p>
<p>perror(&quot;创建socket失败&quot;),exit(-1); </p>
</p>
<p>structsockaddr_unaddr; </p>
</p>
<p>addr.sun_family=PF_UNIX; </p>
</p>
<p>strcpy(addr.sun_path,&quot;a.sock&quot;); </p>
</p>
<p>//连接 </p>
</p>
<p>intres=connect(sockfd,(structsockaddr*)&amp;addr,sizeof(addr));    </p>
</p>
<p>if(res==-1)perror(&quot;失败&quot;),exit(-1); </p>
</p>
<p>printf(&quot;成功//n&quot;); </p>
</p>
<p>write (sockfd,&quot;Hello,Socket!&quot;,14); </p>
</p>
<p>close(sockfd); </p>
</p>
<p>return0; </p>
</p>
<p>} </p>
</p>
</td>
</tr>
<tr style="height:33px"></tr>
</table>
</article>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.aitaocui.cn/article/336261.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
