千鋒教育北京linux培訓(xùn)怎么樣_第1頁
千鋒教育北京linux培訓(xùn)怎么樣_第2頁
千鋒教育北京linux培訓(xùn)怎么樣_第3頁
千鋒教育北京linux培訓(xùn)怎么樣_第4頁
千鋒教育北京linux培訓(xùn)怎么樣_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 Linux網(wǎng)絡(luò)編程培訓(xùn)哪個好Linux下的網(wǎng)絡(luò)編程培訓(xùn)哪個好?先來了解一下什么事Linux下的網(wǎng)絡(luò)編程吧!Linux下的網(wǎng)絡(luò)編程指的是socket套接字編程,入門比較簡單。在學(xué)校里學(xué)過一些皮毛,平時就是自學(xué)玩,沒有見識過真正的socket編程大程序,比較遺憾??偢杏X每次看的時候都有收獲,但是每次看完了之后,過段時間不看,重新拾起這些知識的時候又要從頭開始,所以,在這里做個筆記也算是做個模板,以后可以直接從某一個階段開始接著玩socket套接字基本函數(shù)介紹1 創(chuàng)建socket套接字int socket(int family, int type, int protocol;功能介紹:在Linux

2、操作系統(tǒng)中,一切皆文件,這個大家都知道,個人理解創(chuàng)建socket 的過程其實就是一個獲得文件描述符的過程,當(dāng)然這個過程會是比較復(fù)雜的。可以從內(nèi)核中找到創(chuàng)建socket的代碼,并且socket的創(chuàng)建和其他的listen,bind 等操作分離開來。socket函數(shù)完成正確的操作是返回值大于0的文件描述符,當(dāng)返回小于0的值時,操作錯誤。同樣是返回一個文件描述符,但是會因為三個參數(shù)組合不同,對于數(shù)據(jù)具體的工作流程不同,對于應(yīng)用層編程來說,這些也是不可見的。參數(shù)說明:從socket創(chuàng)建的函數(shù)可以看出,socket有三個參數(shù),family代表一個協(xié) 議族,比較熟知的就是AF_INET,PF_PACKET等

3、;第二個參數(shù)是協(xié)議類型,常見類型是SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_PACKET等;第三個參數(shù)是具體的協(xié)議,對于標(biāo)準(zhǔn)套接字來說,其值是0,對于原始套接字來說就是具體的協(xié)議值。2 地址端口綁定函數(shù)bindint bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen;功能介紹:bind函數(shù)主要應(yīng)用于服務(wù)器模式一端,其主要的功能是將addrlen長度struct sockaddr類型的myaddr地址與sockfd文件描述符綁定到一起,在sockaddr中主要包含服務(wù)器端的協(xié)議

4、族類型,網(wǎng)絡(luò)地址和端口號等。在客戶端模式中不需要使用bind函數(shù)。當(dāng)bind函數(shù)返回0時,為正確綁定,返回-1,則為綁定失敗。參數(shù)說明:bind函數(shù)的第一個參數(shù)sockfd是在創(chuàng)建socket套接字時返回的文件描述符。bind函數(shù)的第二個參數(shù)是struct sockaddr類型的數(shù)據(jù)結(jié)構(gòu),由于struct sockaddr數(shù)據(jù)結(jié)構(gòu)類型不方便設(shè)置,所以通常會通過對truct sockaddr_in進(jìn)行地質(zhì)結(jié)構(gòu)設(shè)置,然后進(jìn)行強(qiáng)制類型轉(zhuǎn)換成struct sockaddr類型的數(shù)據(jù),下面是兩種類型數(shù)據(jù)結(jié)構(gòu)的定義和對應(yīng)關(guān)系圖。 typedef unsigned short sa_family_t;str

5、uct in_addr _be32 s_addr;struct sockaddr sa_family_t sa_family; /* address family, AF_xxx */ char sa_data14; /* 14 bytes of protocol address */ ;/* Structure describing an Internet (IP socket address. */#define _SOCK_SIZE_ 16 /* sizeof(struct sockaddr */ struct sockaddr_in sa_family_t sin_family; /*

6、 Address family */ _be16 sin_port; /* Port number */struct in_addr sin_addr; /* Internet address */* Pad to size of struct sockaddr'. */unsigned char _pad_SOCK_SIZE_ - sizeof(short int -sizeof(unsigned short int - sizeof(struct in_addr; 圖5 struct sockaddr_in和struct sockaddr的映射關(guān)系bind函數(shù)的第三個參數(shù)是指定st

7、ruct sockaddr類型數(shù)據(jù)的長度,因為前面講過bind函數(shù)的第二個參數(shù)是通過設(shè)置一個較容易的數(shù)據(jù)結(jié)構(gòu),然后通過強(qiáng)制類型轉(zhuǎn)換成struct sockaddr,實際上,第二個參數(shù)具體的數(shù)據(jù)結(jié)構(gòu)的長度會根據(jù)socket創(chuàng)建時,設(shè)置的family協(xié)議族的不同而不同,像AF_UNIX協(xié)議族的bind函數(shù)第二個參數(shù)的數(shù)據(jù)結(jié)構(gòu)應(yīng)該是struct sockaddr_un,其大小和struct sockaddr_in不同。3 監(jiān)聽本地端口listenint listen(int sockfd, int backlog;功能介紹:剛開始理解listen函數(shù)會有一個誤區(qū),就是認(rèn)為其操作是在等在一個新的con

8、nect的到來,其實不是這樣的,真正等待connect的是accept操作,listen 的操作就是當(dāng)有較多的client發(fā)起connect時,server端不能及時的處理已經(jīng)建立的連接,這時就會將connect連接放在等待隊列中緩存起來。這個等待隊 列的長度有l(wèi)isten中的backlog參數(shù)來設(shè)定。listen和accept函數(shù)是服務(wù)器模式特有的函數(shù),客戶端不需要這個函數(shù)。當(dāng)listen運(yùn)行成功時,返回0;運(yùn)行失敗時,返回值位-1.參數(shù)說明:sockfd是前面socket創(chuàng)建的文件描述符;backlog是指server端可以緩存連接的最大個數(shù),也就是等待隊列的長度。4 接受網(wǎng)絡(luò)請求函數(shù)ac

9、ceptint accept(int sockfd, struct sockaddr *client_addr, socklen_t *len; 功能介紹:接受函數(shù)accept其實并不是真正的接受,而是客戶端向服務(wù)器端監(jiān)聽端口發(fā)起的連接。對于TCP來說,accept從阻塞狀態(tài)返回的時候,已經(jīng)完成了三次握手的操作。Accept其實是取了一個已經(jīng)處于connected狀態(tài)的連接,然后把對方的協(xié)議族,網(wǎng)絡(luò)地址以及端口都存在了client_addr中,返回一個用于操作的新的文件描述符,該文件描述符表示客戶端與服務(wù)器端的連接,通過對該文件描述符操作,可以向client端發(fā)送和接收數(shù)據(jù)。同時之前socke

10、t創(chuàng)建的sockfd,則繼續(xù)監(jiān)聽有沒有新的連接到達(dá)本地端口。返回大于0的文件描述符則表示accept成功,否則失敗。參數(shù)說明:sockfd是socket創(chuàng)建的文件描述符;client_addr是本地服務(wù)器端的一個struct sockaddr類型的變量,用于存放新連接的協(xié)議族,網(wǎng)絡(luò)地址以及端口號等;第三個參數(shù)len是第二個參數(shù)所指內(nèi)容的長度,對于TCP來說其值可以用sizeof(struct sockaddr_in來計算大小,說要說明的是accept的第三個參數(shù)要中國 IT 職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 是指針的形式,因為這個值是要傳給協(xié)議棧使用的。 5 連接目標(biāo)服務(wù)器函數(shù) conne

11、ct int connect(int sock_fd, struct sockaddr *serv_addr,int addrlen; 功能介紹: 連接函數(shù) connect 是屬于 client 端的操作函數(shù),其目的是向服務(wù)器端發(fā)送 連接請求,這也是從客戶端發(fā)起 TCP 三次握手請求的開始,服務(wù)器端的協(xié)議族, 網(wǎng)絡(luò)地址以及端口都會填充到 connect 函數(shù)的 serv_addr 地址當(dāng)中。 當(dāng) connect 返回 0 時說明已經(jīng) connect 成功,返回值是 -1 時,表示 connect 失敗。 參數(shù)說明: connect 的第一個參數(shù)是 socket 創(chuàng)建的文件描述符;第二個參數(shù)是一

12、個 struct sockaddr 類型的指針,這個參數(shù)中設(shè)置的是要連接的目標(biāo)服務(wù)器的協(xié)議 族,網(wǎng)絡(luò)地址以及端口號;第三個參數(shù)表示第二個參數(shù)內(nèi)容的大小,與 accept 不同,這個值不是一個指針。 在服務(wù)器端和客戶端建立連接之后是進(jìn)行數(shù)據(jù)間的發(fā)送和接收,主要使用 的接收函數(shù)是 recv 和 read,發(fā)送函數(shù)是 send 和 write。因為對于 socket 套接 字來說, 最終實際操作的是文件描述符, 所以可以使用對文件進(jìn)行操作的接收和 發(fā)送函數(shù)對 socket 套接字進(jìn)行操作。對于 UDP 編程來說,其服務(wù)器端和客戶 端之間沒有三次握手建立連接,所以服務(wù)器端沒有 listen 和 acc

13、ept 函數(shù),客戶 端沒有 connect 函數(shù)。所以對于服務(wù)器端來說,沒有 accept 函數(shù),所以使用 recvfrom 函數(shù)來獲取數(shù)據(jù)的同時獲得客戶端的協(xié)議族,網(wǎng)絡(luò)地址以及端口號; 對于客戶端來說, 沒有 connect 函數(shù), 所以使用 sendto 函數(shù)發(fā)送數(shù)據(jù)的同時設(shè) 千鋒教育 中國 IT 職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 置服務(wù)器端的協(xié)議族,網(wǎng)絡(luò)地址以及端口;同理如果 recvfrom 用在客戶端,則 是接收服務(wù)器端數(shù)據(jù)和地址, sendto 用在服務(wù)器端,則是發(fā)送到客戶端網(wǎng)絡(luò)地 址以及端口數(shù)據(jù)。 6 接收數(shù)據(jù)函數(shù) recvfrom ssize_t recvfrom(int

14、sockfd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen; 功能介紹: 對于該函數(shù)主要的功能是,從客戶端或者服務(wù)器端接收數(shù)據(jù)以及發(fā)送方的 地址信息存儲到本地的 struct sockaddr 類型參數(shù)變量當(dāng)中,如果函數(shù)返回-1, 所說明接收數(shù)據(jù)失敗, 如果返回的是大于等于 0 的值, 則說明函數(shù)接收到的數(shù)據(jù) 的大小。 因為可以設(shè)置文件描述符的狀態(tài)為阻塞模式, 所以在沒有接收到數(shù)據(jù)時, recvfrom 會一直處于阻塞狀態(tài),直到有數(shù)據(jù)接收到。 參數(shù)說明: sockfd 是創(chuàng)建 socke

15、t 時的文件描述符; buf 用于存儲接收到的數(shù)據(jù)緩沖 區(qū),接收的數(shù)據(jù)將放到這個指針?biāo)赶虻膬?nèi)容的空間中;len 是接收緩沖區(qū)的大 小;from 是指向 struct sockaddr 的指針,接收發(fā)送方地址信息; fromlen 是 表示第 5 個參數(shù)所指向內(nèi)容的長度,可以使用 sizeof(struct sockaddr來定義 大小,不過因為是要傳給內(nèi)核協(xié)議棧,所以使用了指針類型。 7 發(fā)送數(shù)據(jù)函數(shù) sendto sizeof_t sendto(int sockfd, const void *buf, size_t len, int flag, const struct sockaddr

16、*to, socklen_t tolen; 功能介紹: 千鋒教育 中國 IT 職業(yè)教育領(lǐng)先品牌 精品課程 全程面授 sendto 函數(shù)主要根據(jù)填充的接收方的地址信息向客戶端或者服務(wù)器端發(fā) 送數(shù)據(jù),接收方的地址信息會提前設(shè)置在 struct sockaddr 類型的參數(shù)指針中, 當(dāng)返回值 -1 時,表明發(fā)送失敗,當(dāng)返回值大于等于 0 時,表示發(fā)送成功,并且 發(fā)送數(shù)據(jù)的大小會通過返回值傳遞回來。 參數(shù)說明: sockfd 是有 socket 創(chuàng)建的文件描述符; buf 是發(fā)送數(shù)據(jù)緩沖區(qū),要發(fā)送 的數(shù)據(jù)會放在這個指針指向的內(nèi)容空間中;len 是發(fā)送緩沖區(qū)的大?。籺o 是一個 struct sockaddr 類型的指針,其指向地址的內(nèi)容是接收方地址信息;tolen 表 示第 5 個參數(shù)指向的數(shù)據(jù)內(nèi)容的長度,傳遞的是值,可以用 sizeof(struct sockaddr計算。 以上就是千鋒 Linux 學(xué)院的學(xué)習(xí)筆記。 另附心得體會一篇: 從零基礎(chǔ)開始學(xué) Linux 或者是轉(zhuǎn)行學(xué)習(xí) Linux,參加培訓(xùn)會保證你在單位時 間內(nèi)學(xué)到更多,畢竟隨著 Linux 行業(yè)的快速發(fā)展,未來必將會面臨更多的競爭, 所以只有不遺余力的把自己打造成一把利劍, 從專業(yè)度到職業(yè)素質(zhì)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論