linux面向连接的协议,linuxTCP协议.ppt
linuxTCP協議
課程安排 面向連接的套接字通信工作流程 綁定端口 監聽與連接 數據的發送與接收 所謂socket套接字,指的是在網絡通信以前建立的通信接口。進行網絡連接以前,需要向系統注冊申請一個新的socket。然后使用這個socket進行網絡連接。 提示:套接字=傳輸層協議+端口號+IP地址。 在進行網絡連接以前,需要用socket函數向系申請一個通信端口。這個函數的使用方法如下所示。 int socket(int domain, int type, int protocol); 面向連接的套接字通信工作流程 為了實現服務器與客戶機的通信,服務器和客戶機都必須建立套接字。服務器與 客戶機的工作原理可以用下面的過程來描述。 (1)服務器先用socket函數來建立一個套接字,用這個套接字完成通信的監聽。 (2)用bind函數來綁定一個端口號和IP地址。因為本地計算機可能有多個網卡和IP,每一 個IP有多個端口。需要指定一個IP和端口進行監聽。 (3)服務器調用listen函數,使服務器的這個端口和IP處于監聽狀態,等待客戶機的連接 (4)客戶機用socket函數建立一個套接字,設定遠程IP和端口。 (5)客戶機調用connect函數連接遠程計算機指定的端口。 (6)服務器用accept函數來接受遠程計算機的連接,建立起與客戶機之間的通信。 (7)建立連接以后,客戶機用write函數向socket中寫入數據。也可以用read函數讀取服 務器發送來的數據。 (8)服務器用read函數讀取客戶機發送來的數據,也可以用write函數來發送數據。 (9)完成通信以后,用close函數關閉socket連接。 客戶機與服務器建立面向連接的套接字進行通信,請求與響應過程可用圖17-1來表示。 Socket Function 創建一個套接口,指定協議類型 ?#include //#include ?int fd= socket(int family, int type, int protocol) ?family ?AF_INET//IPv4 ?AF_INET6//IPv6 ?type ?SOCK_STREAM // TCP ?SOCK_DGRAM // UDP ?SOCK_RAW // IP ?Protocol = 0 // 一般一個套接字類型只支持一個協議 ?//返回值:出錯返回-1,否則返回socket 套接字描述符 綁定端口 綁定端口指的是將套接字與指定的端口相連。用socket函數建立起一個套接字以后,需要用bind函數在這個套接字上面綁定一個端口。 提示:只有套接字建立后才能夠執行端口綁定操作。 綁定端口函數bind:函數bind可以將一個端口綁定到一個已經建立的socket上,這個函數的使用方法如下所示。 int bind(int sockfd,struct sockaddr *my_addr,int addrlen); 參數列表中,sockfd是已經建立的socket編號。sockaddr是一個指向sockaddr結構體類型的指針。sockaddr的定義方法如下所示。 struct sockaddr { unsigned short int sa_family; char sa_data[14]; }; 這個結構體的成員含義如下所示。 sa_family:為調用socket()時的domain參數,即AF_xxxx值。 sa_data:最多使用14個字符長度,含有IP地址與端口的信息。 如果建立socket時使用的是AF_INET參數,則sockaddr結構體的定義方法如下所示。 01struct sockaddr_in 02{ 03 unsigned short int sin_family; 04 uint16_t sin_port;//2 05 struct in_addr sin_addr; //4 06 unsigned char sin_zero[8]; 07}; 結構體的成員addr也是一個結構體,定義方式如下所示。 struct in_addr { uint32_t s_addr; }; 在這些結構體中,成員變量的作用與含義如下所示。 sin_family:即為sa_family,為調用socket()時的domain參數。 sin_port:使用的端口號。 sin_addr.s_addr:IP 地址。 sin_zero:未使用的字段,填充為0。 參數addrlen是my_addr的長度,可以用sizeof函數來取得。函數可以把指定的IP與端口綁定到已經建立的socket上面。
總結
以上是生活随笔為你收集整理的linux面向连接的协议,linuxTCP协议.ppt的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux imq原理图,编译IMQ模块
- 下一篇: linux网络寻址顺序,51CTO博客-