sockaddr与sockaddr_in的区别
struct sockaddr {unsigned short sa_family; char sa_data[14]; };
此數據結構用做bind、connect、recvfrom、sendto等函數的參數,指明地址信息。
 但一般編程中并不直接針對此數據結構操作,而是使用另一個與sockaddr等價的數據結構
 sockaddr_in(在netinet/in.h中定義):
 
 sin_family指代協議族,在socket編程中只能是AF_INET
 sin_port存儲端口號(使用網絡字節順序)
 sin_addr存儲IP地址,使用in_addr這個數據結構
 sin_zero是為了讓sockaddr與sockaddr_in兩個數據結構保持大小相同而保留的空字節。
 s_addr按照網絡字節順序存儲IP地址
 sockaddr_in和sockaddr是并列的結構,指向sockaddr_in的結構體的指針也可以指向
 sockadd的結構體,并代替它。也就是說,你可以使用sockaddr_in建立你所需要的信息,
 在最后用進行類型轉換就可以了bzero((char*)&mysock,sizeof(mysock));//初始化
 mysock結構體名
 mysock.sa_family=AF_INET;
 mysock.sin_addr.s_addr=inet_addr("192.168.0.1");
 ……
 等到要做轉換的時候用:
 (struct sockaddr*)mysock
 想來你是要進行網絡編程,使用socket, listen, bind等函數。
 你只要記住,填值的時候使用sockaddr_in結構,而作為函數的參數傳入的時候轉換成sockaddr結構就行了,畢竟都是16個字符長。
常用轉化IP地址的兩個函數:
unsigned long inet_addr( const char FAR *cp ); //將“192.168.0.1”類似字符串轉化為in_addr結構體
char FAR * inet_ntoa( struct in_addr in );//將in_addr結構體轉化為“192.168.0.1”類似字符串
總結
以上是生活随笔為你收集整理的sockaddr与sockaddr_in的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 详细解析WSAEventSelect模型
- 下一篇: getsockname与getpeern
