亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

socket網絡編程基礎

2019-11-06 05:26:51
字體:
來源:轉載
供稿:網友
一.socket編程函數1.socket函數原型:int socket(int domain, int type, int PRotocol);作用: 創建一個端點并返回一個socket描述符。參數解析:domain: 指定一個會話域名,選擇一個協議族用于這個會話。包含于<sys/socket.h>中。目前默認格式包括    AF_UNIX,AF_LOCAL  AF_INET  AF_INET6...type: 新套接口的類型描述。    SOCK_STREAM  SOCK_DGRAM  SOCK_SEQQPACKET...protocol: 通過domain和type已經基本確定了新建的socket具體是什么類型的套接字,最后一步通過protocol來確定socket到底支持的哪個協議(TCP?UDP?)。    為0,則可以理解為一個通配符也可以理解為一個默認值,就是說我不指定protocol,由內核自己決定使用哪一個protocol。返回值:成功返回socket描述,失敗返回-1.2.bind函數原型:int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);作用:當通過socket創建一個描述符后,它就存在一個名字空間,但未給它分配地址空間。bind函數就是將addr地址分配給sockfd.參數解析:sockfd:未分配地址空間的socket描述符。addr:地址指針。      賦值:        sockaddr_in addr;        memset(&addr, 0, sizeof(addr));        addr.sin_family = AF_INET;        addr.sin_port = htons(m_nPort);        addr.sin_addr.s_addr = INADDR_ANY;    INADDR_ANY:表示當主機有多個ip時,客戶連接任意ip都可以。addrlen:地址長度。返回值:成功返回0,失敗返回-1.3.listen函數原型:int listen(int sockfd, int backlog);作用:處理客戶端三次握手過程。參數解析:sockfd:分配地址空間的socket描述符。backlog:backlog參數決定了未完成隊列和已完成隊列中連接數目之和的最大值。    內核為任何一個給定的監聽套接字維護兩個隊列。    1)未完成連接隊列      由客戶發出并到達服務器,而服務器正在等待完成相應的TCP三路握手的過程。      這些套接字處于SYN_RCVD狀態。        2)已完成連接隊列      每個已完成TCP三路握手過程的客戶對應其中一項。這些套接字處于ESTABLISHED狀態。    返回值:成功返回0,失敗返回-1.4.accept函數原型:int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);作用:從bind的已完成連接隊列中獲取一個fd及地址信息。如果該隊列為空,則進程進入休眠(套接字為阻塞方式)。參數解析:sockfd:分配地址空間的socket描述符。addr:保存接收到客戶的地址信息。addrlen:客戶地址長度。返回值:成功返回客戶連接socket描述符,失敗返回-1。listen和accept過程參考文檔:http://blog.csdn.net/ordeder/article/details/215515675.connect函數原型:int connet(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);作用:用于TCP客戶來與服務器建立連接。    客戶端調用connect前并不需要非得調用bind函數,因為內核會根據源IP地址,選擇一個臨時端口作為源端口。    如果是TCP套接字,調用connect函數將會激發TCP的三路握手過程,而且僅在連接建立成功或出錯時才返回。參數解析:sockfd:分配地址空間的socket描述符。servaddr:指向套接字地址結構的指針,包含服務器IP和端口號。addrlen:套接字地址結構大小。返回值:成功返回0,錯誤返回-1.若失敗,需要重新創建套接字。6.recv函數原型:ssize_t recv(int sockfd, void *buf, size_t len, int flags);作用:將sockfd接收緩沖區的內容copy到buf中。    recv函數僅僅是copy數據,真正的接收數據是協議來完成的參數解析:sockfd:分配地址空間的socket描述符。buf:保存接收數據。len:從sockfd內核接收緩沖區中copy數據長度。flags:一般填0,設置模式。返回值:大于0表示接收數據字節長度,0表示對方斷開連接,-1表示失敗。7.send函數原型:ssize_t send(int sockfd, const void *buf, size_t len, int flags);作用:將buf中的內容copy到sockfd內核發送緩沖區中。    send函數僅僅是copy數據,真正的發送數據是協議來完成的參數解析:sockfd:分配地址空間的socket描述符。buf:保存發送數據。len:將buf數據copy到sockfd內核發送緩沖區中的長度。flags:一般填0,設置模式。返回值:返回發送的字節長度。-1表示失敗。send和recv函數處理過程參考文檔:http://www.cnblogs.com/jianqiang2010/archive/2010/08/20/1804598.html8.setsockopt函數9.getsockopt函數10.其他函數inet_pton, inet_ntop, getsockname, getpeername二.問題1.socket阻塞和非阻塞的區別(列全)  阻塞:當發出一個不能立即完成的套接字調用時,其進程進入休眠狀態,等待相應操作完成。  socket阻塞分為以下4類:  1)輸入操作:read、readv、recv、recvfrom、recvmsg    對于阻塞的TCP套接字,如果套接字的接收緩沖區中沒有數據可讀,該進程將被投入休眠,直到有數據到達。    對于非阻塞套接字,如果接收緩沖區中沒有數據可讀,相應的調用將立即返回一個EWOULDBLOCK錯誤。  2)輸出操作:write、writev、send、sendto、sendmsg    內核將從應用進程的緩沖區copy到該套接字的發送緩沖區。    對于阻塞套接字,如果其套接字發送緩沖區中沒有空間,進程將被投入睡眠,直到有空間為止。    對于非阻塞的TCP套接字,如果其發送緩沖區中根本沒有空間,輸出函數調用將立即返回一個EWOULDBLOCK錯誤。如果有發送緩沖區中有一些空間,    返回值將是內核能夠復制到該緩沖區中的字節數。  3)接收外來連接:accept    對于阻塞套接字調用accept函數,當無新連接到達,調用進程將被投入休眠。    對于非阻塞套接字調用accept函數,當無新連接到達,accept調用將立即返回一個EWOULDBLOCK錯誤。  4)發起外出連接:connect    對于阻塞套接字,連接不上則阻塞(linux阻塞75s),如果想不阻塞,則可以采用定時器信號的機制處理。    對非阻塞套接字,連接不上則立即返回,若為0,則表示已經建立連接;若為-1,如果error為EINPROGRESS,則使用select函數監測fd的連接狀態。  fcntl函數設置。參考文檔:http://blog.csdn.net/pingnanlee/article/details/7770087http://blog.csdn.net/nphyez/article/details/102687232.gdb調試coredump文件時,函數名為????問號  一些庫找不到(/lib/libstdc++.so.6),或者版本不匹配。3.sleep和阻塞等待的區別4.epoll模型詳細處理過程5.nginx詳解6.三次握手與四次揮手的過程。  三次握手:    1)客戶端發送SYN包到服務器,并進入SYN_SEND狀態,等待服務器確認。    2)服務器收到SYN包,并確認。同時自己發送一個SYN包,及ACK+SYN,服務器進入SYN_RECV狀態。    3)客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ACK=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。    完成三次握手,客戶端與服務器開始傳送數據。  四次揮手:    TCP是全雙工通信方式。    1)發起關閉一端發出FIN,告訴被關閉端,我關閉發送鏈路,不再發送數據給你,但你可以發送數據給我。    2)被動關閉一端發出ACK,確認。    3)被動關閉一端發出FIN,告訴關閉端,我關閉我的發送鏈路,不再發送數據給你。    4)發起關閉一端發出ACK。7.TIME_WAIT與CLOSE_WAIT狀態 CLOSE_WAIT:  在關閉TCP連接時,  發起TCP連接關閉的一方稱為client,被動關閉的一方稱為server。被動關閉的server收到FIN后,但未發出ACK的TCP狀態是CLOSE_WAIT。 TIME_WAIT:  根據TCP協議定義的3次握手斷開連接規定,發起socket主動關閉的一方 socket將進入TIME_WAIT狀態。  TIME_WAIT狀態將持續2個MSL(Max Segment Lifetime),在Windows下默認為4分鐘,即240秒。  TIME_WAIT狀態下的socket不能被回收使用. 具體現象是對于一個處理大量短連接的服務器,  如果是由服務器主動關閉客戶端的連接,將導致服務器端存在大量的處于TIME_WAIT狀態的socket,   甚至比處于Established狀態下的socket多的多,嚴重影響服務器的處理能力,甚至耗盡可用的socket,停止服務。  可以通過設置端口復用或修改TIME_WAIT等待時間的方式,解決TIME_WAIT狀態的問題。  參考文檔:http://www.cnblogs.com/sunxucool/p/3449068.htmlhttp://www.cnblogs.com/Jessy/p/3535612.html8.TIME_WAIT狀態設置的意義9.SO_REUSEADDR如何解決TIME_WAIT狀態下端口復用的問題?  設置了SO_REUSEADDR這個標志的socket,在bind端口時,如果這個端口沒在使用或者在使用但處于TIME_WAIT狀態,可以綁定成功。  如果正在使用處于非TIME_WAIT狀態,則綁定失敗。參考文檔:http://www.cnblogs.com/qq78292959/archive/2013/01/18/2865926.html9.TCP/IP如何保證數據的準確性和順序性10.線程同步(Linux)  1)互斥鎖  2)信號量  3)條件變量    11.進程間通信socket錯誤編碼表:http://blog.chinaunix.net/uid-116213-id-3376727.html網絡編程:http://blog.csdn.net/weiyuefei/article/category/2821641http://blog.csdn.net/weiyuefei/article/details/52242778復習板塊:1.C/C++基本語法2.TCP/IP協議3.socket編程4.線程和進程同步與異步以及如何編程5.服務器并發處理(epoll)6.使用了哪些開源庫  jsoncpp, tinyxml, openssl, mongodb
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲无亚洲人成网站77777| 久久精品久久久久电影| 亚洲国产精品99久久| 91av在线精品| 中文字幕日韩综合av| 国产69精品久久久| 久久久久久久久综合| 成人国产精品久久久| 亚洲成人黄色在线| 国产精品久久久久久久午夜| 亚洲精品99久久久久| 日韩成人av网址| 亚洲aa在线观看| 中文字幕少妇一区二区三区| 影音先锋欧美精品| 日本精品视频网站| 国产精品亚洲欧美导航| 在线日韩日本国产亚洲| 欧美午夜宅男影院在线观看| 亚洲一级黄色av| 国产福利精品av综合导导航| 另类少妇人与禽zozz0性伦| 国产精品久久久久免费a∨| 一区二区三区视频免费| 亚洲天堂av网| 中文字幕亚洲国产| 亚洲一区二区三区视频| 国产成人97精品免费看片| 久久91亚洲精品中文字幕| 97超碰蝌蚪网人人做人人爽| 尤物99国产成人精品视频| 欧美丝袜美女中出在线| 国产69精品久久久久9| 国产精品久久久久久久av电影| 日韩中文字幕视频| 亚洲欧美日韩中文在线制服| 国产精品成久久久久三级| 欧美性生交xxxxxdddd| 57pao成人国产永久免费| 色悠悠国产精品| 亚洲视频在线播放| 国产精品欧美日韩一区二区| 亚洲一区二区黄| 国产精品视频成人| 在线电影av不卡网址| 国外日韩电影在线观看| 久久影视电视剧免费网站清宫辞电视| 亚洲视频专区在线| 亚洲国产精品电影在线观看| 色狠狠av一区二区三区香蕉蜜桃| 欧美大尺度激情区在线播放| 粉嫩av一区二区三区免费野| 91黑丝高跟在线| 中文字幕亚洲色图| 国产乱人伦真实精品视频| 国外色69视频在线观看| 2019中文字幕免费视频| 欧美成人精品在线播放| 4388成人网| 久久久久久网址| 91久久在线播放| 欧美视频在线看| 欧美国产日韩视频| 亚洲国产精品悠悠久久琪琪| 欧美精品一区三区| 久久精品国产一区二区三区| 亚洲精品xxxx| 国产日韩一区在线| 亚洲国产私拍精品国模在线观看| 日韩在线资源网| 久久中文精品视频| 亚洲男女性事视频| 亚洲美女喷白浆| 国产精品第一页在线| 国产一区二区香蕉| 欧美激情按摩在线| 免费91麻豆精品国产自产在线观看| 亚洲国产精品成人精品| 98精品在线视频| 色婷婷综合成人av| 成人黄色在线观看| 日韩国产欧美精品一区二区三区| 国产日韩欧美视频| 国产成人在线播放| 国产精品入口日韩视频大尺度| 性色av香蕉一区二区| 精品一区二区三区四区| 日韩免费观看网站| 中文一区二区视频| 国产精品欧美一区二区| 一区二区在线免费视频| 日韩av在线网站| 亚洲女同性videos| 欧美插天视频在线播放| 91精品国产91久久久久久吃药| 91麻豆国产语对白在线观看| 91av视频在线观看| 日韩性生活视频| 在线精品91av| 国产成人精品国内自产拍免费看| 久久97精品久久久久久久不卡| 91手机视频在线观看| 久久精品中文字幕电影| 国产亚洲欧美日韩一区二区| 正在播放欧美视频| 亚洲国产中文字幕久久网| 亚洲欧美在线播放| 国产精品户外野外| 久久久噜噜噜久久中文字免| 91国内精品久久| 欧美在线一区二区三区四| 亚洲成人激情视频| xxxxx91麻豆| 国产精品扒开腿做| 亚洲免费精彩视频| 国产精品亚洲美女av网站| 亚洲精品国产综合久久| 欧美精品激情blacked18| 精品国模在线视频| 91av在线免费观看视频| 国模精品视频一区二区| 亚洲另类图片色| 日韩精品在线观看一区| 久久精品国产欧美激情| 欧美国产日韩一区| 久久99热这里只有精品国产| 欧美大片免费观看在线观看网站推荐| 欧美与黑人午夜性猛交久久久| 97精品视频在线播放| 久久久久国产一区二区三区| 成人午夜在线视频一区| 最近2019好看的中文字幕免费| 在线播放精品一区二区三区| 91视频九色网站| 久久精品中文字幕免费mv| 国产亚洲一区二区在线| 欧美激情综合色| 日韩欧美亚洲成人| 成人国产精品久久久| 欧美成人精品三级在线观看| 欧美成人免费网| 4p变态网欧美系列| 欧美精品久久久久久久久| 色偷偷av亚洲男人的天堂| 欧美视频中文在线看| 日韩精品中文字幕有码专区| 国产精品色视频| 中文字幕日韩欧美精品在线观看| 亚洲色图15p| 在线看片第一页欧美| 欧美成年人在线观看| 国产亚洲成av人片在线观看桃| 成人免费自拍视频| 色偷偷噜噜噜亚洲男人的天堂| 亚洲福利影片在线| 欧美性猛交视频| 欧美与欧洲交xxxx免费观看| 亚洲视频国产视频| 日韩美女写真福利在线观看| 91精品国产高清久久久久久久久| 久久在线观看视频| 国产成人av网| 91精品国产自产在线| 国产精品视频大全|