1 struct sockaddr 2 { 3 unsigned short sa_family;/*addressfamily,AF_xxx*/ 4 char sa_data[14];/*14bytesofprotocoladdress*/ 5 };
1 structsockaddr_in 2 3 { 4 5 shortsin_family;/*Addressfamily通常来讲AF_INET(地址族)PF_INET(协议族)*/ 6 7 unsignedshortsin_port;/*Portnumber(必需要采用网络数据格式,普通数字能够用htons()函数转换成网络数据格式的数字)*/ 8 9 structin_addrsin_addr;/*Internetaddress*/ 10 11 unsignedcharsin_zero[8];/*Samesizeasstructsockaddr没有实际意义,只是为了 跟SOCKADDR结构在内存中对齐*/ 12 13 };
1 structsockaddr_in 2 3 { 4 5 #if(_WIN32_WINNT<0x0600) 6 7 shortsin_family; 8 9 #else//(_WIN32_WINNT<0x0600) 10 11 address_familysin_family; 12 13 #endif//(_WIN32_WINNT<0x0600) 14 15 ushortsin_port; 16 17 in_addrsin_addr; 18 19 charsin_zero[8]; 20 21 }
1 in_addr结构 2 typedefstructin_addr 3 4 { 5 6 unsignedlongs_addr; 7 8 };
1 typedefstructin_addr 2 3 { 4 5 union 6 7 { 8 9 struct{unsignedchars_b1,s_b2,s_b3,s_b4;}S_un_b; 10 11 struct{unsignedshorts_w1,s_w2;}S_un_w; 12 13 unsignedlongS_addr; 14 15 }S_un; 16 17 }in_addr;
1 //服务端: 2 int main() 3 { 4 //建立socket 5 intsockfd=socket(PF_LOCAL,SOCK_DGRAM,0); 6 if(sockfd==-1) 7 perror("建立socket失败"),exit(-1); 8 //准备通讯地址 9 structsockaddr_unaddr; 10 addr.sun_family=PF_UNIX; 11 strcpy(addr.sun_path,"a.sock"); 12 //绑定 13 intres=bind(sockfd,(structsockaddr*)&addr,sizeof(addr)); 14 if(res==-1)perror("绑定失败"),exit(-1); 15 printf("绑定成功\n"); 16 //通讯(用读写文件方式) 17 charbuf[100]={}; 18 read(sockfd,buf,sizeof(buf)); 19 printf("收到信息:%s\n",buf); 20 //关闭socket 21 close(sockfd); 22 return0; 23 } 24 25 //客户端: 26 int main() 27 { 28 intsockfd=socket(PF_LOCAL,SOCK_DGRAM,0); 29 if(sockfd==-1) 30 perror("建立socket失败"),exit(-1); 31 structsockaddr_unaddr; 32 addr.sun_family=PF_UNIX; 33 strcpy(addr.sun_path,"a.sock"); 34 //链接 35 intres=connect(sockfd,(structsockaddr*)&addr,sizeof(addr)); 36 if(res==-1)perror("失败"),exit(-1); 37 printf("成功\n"); 38 write(sockfd,"Hello,Socket!",14); 39 close(sockfd); 40 return0; 41 } 42 43