字節序是指多字節數據的存儲順序,在設計計算機系統的時候,有兩種處理內存中數據的方法:大端格式、小端格式。編程
小端格式(Little-Endian):將低位字節數據存儲在低地址。網絡
大端格式(Big-Endian):將高位字節數據存儲在低地址。dom
例如:socket
注:int類型是4字節,char類型是1字節,函數
所以 int a = 0X1234 ;(即 int a = 0X00001234)設計
char *p = &a; (因爲char類型是1字節,所以它會去取int類型的低位)3d
去判斷*p是 00, 仍是34,便可判斷是大端仍是小端blog
網絡字節是大端,網絡編程將主機字節數據轉化爲網絡字節數據。進程
套接字是一種通訊機制(通訊的兩方的一種約定),憑藉這種機制,不一樣主機之間的進程能夠進行通訊。咱們能夠用套接字中的相關函數來完成通訊過程。內存
套接字的特性有三個屬性肯定,它們是:域(domain),類型(type),和協議(protocol)。
域指定套接字通訊中使用的網絡介質。最多見的套接字域是 AF_INET(IPv4)或者AF_INET6(IPV6)。
流套接字(SOCK_STREAM):
流套接字用於提供面向鏈接、可靠的數據傳輸服務。流套接字之因此可以實現可靠的數據服務,緣由在於其使用了傳輸控制協議,即TCP。
數據報套接字(SOCK_DGRAM):
數據報套接字提供了一種無鏈接的服務。該服務並不能保證數據傳輸的可靠性,數據有可能在傳輸過程當中丟失或出現數據重複,且沒法保證順序地接收到數據。數據報套接字使用UDP(User Datagram Protocol)協議進行數據的傳輸。因爲數據報套接字不能保證數據傳輸的可靠性,對於有可能出現的數據丟失狀況,須要在程序中作相應的處理。
原始套接字(SOCK_RAW):
原始套接字與標準套接字(標準套接字指的是前面介紹的流套接字和數據報套接字)的區別在於:原始套接字能夠讀寫內核沒有處理的IP數據包,而流套接字只能讀取TCP協議的數據,數據報套接字只能讀取UDP協議的數據。所以,若是要訪問其餘協議發送數據必須使用原始套接字。
只要底層的傳輸機制容許不止一個協議來提供要求的套接字類型,咱們就能夠爲套接字選擇一個特定的協議。一般使用默認便可(也就是最後一個參數填「0」)。
須要頭文件:#include <sys/socket.h>
int socket(int family,int type,int protocol);
功能:建立一個用於網絡通訊的 socket 套接字(描述符)
參數:
family:協議族(AF_UNIX、AF_INET、AF_INET六、PF_PACKET等)。最多見的套接字域是 AF_UNIX 和 AF_INET,前者用於經過 Unix 和 Linux 文件系統實現的本地套接字,後者用於 Unix 網絡套接字。AF_INET 套接字能夠用於經過包括因特網在內的 TCP/IP 網絡進行通訊的程序。
type:套接字類型(SOCK_STREAM、SOCK_DGRAM、SOCK_RAW等)。
protocol:協議類別(0、IPPROTO_TCP、IPPROTO_UDP等),設爲 0 表示使用默認協議。
返回值:成功:套接字 失敗(<0)
套接字地址: 每一個套接字(端點)都有其本身的地址格式,對於 AF_UNIX 套接字來講,它的地址由結構 sockaddr_un 來描述,該結構體定義在頭文件 sys/un.h 中