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