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

首頁 > 學院 > 基礎常識 > 正文

基于TCP的socket使用

2020-05-13 14:05:28
字體:
來源:轉載
供稿:網友

   數據傳輸的過程:

  建立連接后,TCP協議提供全雙工的通信服務,但是一般的客戶端/服務器程序的流程是由客戶端主動發起請求,服務器被動處理請求,一問一答的方式。因此,服務器從accept()返回后立刻調用read(),讀socket就像讀管道一樣,如果沒有數據到達就阻塞等待,這時客戶端調用write()發送請求給服務器,服務器收到后從read()返回,對客戶端的請求進行處理,在此期間客戶端調用read()阻塞等待服務器的應答,服務器調用write()將處理結果發回給客戶端,再次調用read()阻塞等待下一條請求,客戶端收到后從read()返回,發送下一條請求,如此循環下去。

  如果客戶端沒有更多的請求了,就調用close()關閉連接,就像寫端關閉的管道一樣,服務器的read()返回0,這樣服務器就知道客戶端關閉了連接,也調用close()關閉連接。注意,任何一方調用close()后,連接的兩個傳輸方向都關閉,不能再發送數據了。如果一方調用shutdown()則連接處于半關閉狀態,仍可接收對方發來的數據。

  在學習socketAPI時要注意應用程序和TCP協議層是如何交互的:

  *應用程序調用某個socket函數時TCP協議層完成什么動作,比如調用connect()會發出SYN段

  *應用程序如何知道TCP協議層的狀態變化,比如從某個阻塞的socket函數返回就表明TCP協議收到了某些段, 再比如read()返回0就表明收到了FIN段.

  最簡單的TCP網絡程序

  Service.c 的作用是從客戶端讀字符,然后將每個字符轉換為大寫并回送給客戶端。

TCP之socket

 

TCP之socket

 

  int socket(int family, inttype, int protocol);

  socket()打開一個網絡通訊端口,如果成功的話,就像open()一樣返回一個文件描述符,應用程序可以像讀寫文件一樣用read/write在網絡上收發數據,如果socket()調用出錯則返回-1。對于IPv4,family參數指定為AF_INET。對于TCP協議,type參數指定為SOCK_STREAM,表示面向流的傳輸協議。如果是UDP協議,則type參數指定為SOCK_DGRAM,表示面向數據報的傳輸協議。protocol參數的介紹從略,指定為0即可。

  int bind(int sockfd, conststruct sockaddr *myaddr, socklen_t addrlen);

  服務器程序所監聽的網絡地址和端口號通常是固定不變的,客戶端程序得知服務器程序的地址和端口號后就可以向服務器發起連接,因此服務器需要調用bind綁定一個固定的網絡地址和端口號。bind()成功返回0,失敗返回-1。

  bind()的作用是將參數sockfd和myaddr綁定在一起,使sockfd這個用于網絡通訊的文件描述符監聽myaddr所描述的地址和端口號。前面講過,struct sockaddr *是一個通用指針類型,myaddr參數實際上可以接受多種協議的sockaddr結構體,而它們的長度各不相同,所以需要第三個參數addrlen指定結構體的長度.

  int listen(int sockfd, intbacklog);

  典型的服務器程序可以同時服務于多個客戶端,當有客戶端發起連接時,服務器調用的accept()返回并接受這個連接,如果有大量的客戶端發起連接而服務器來不及處理,尚未accept的客戶端就處于連接等待狀態,listen()聲明sockfd處于監聽狀態,并且最多允許有backlog個客戶端處于連接待狀態,如果接收到更多的連接請求就忽略。listen()成功返回0,失敗返回-1。

  int accept(int sockfd, structsockaddr *cliaddr, socklen_t *addrlen);

  三方握手完成后,服務器調用accept()接受連接,如果服務器調用accept()時還沒有客戶端的連接請求,就阻塞等待直到有客戶端連接上來。cliaddr是一個傳出參數,accept()返回時傳出客戶端的地址和端口號。addrlen參數是一個傳入傳出參數(value-result argument),傳入的是調用者提供的緩沖區cliaddr的長度以避免緩沖區溢出問題,傳出的是客戶端地址結構體的實際長度(有可能沒有占滿調用者提供的緩沖區)。如果給cliaddr參數傳NULL,表示不關心客戶端的地址。

  由于客戶端不需要固定的端口號,因此不必調用bind(),客戶端的端口號由內核自動分配。注意,客戶端不是不允許調用bind(),只是沒有必要調用bind()固定一個端口號,服務器也不是必須調用bind(),但如果服務器不調用bind(),內核會自動給服務器分配監聽端口,每次啟動服務器時端口號都不一樣,客戶端要連接服務器就會遇到麻煩。

  int connect(int sockfd, conststruct sockaddr *servaddr, socklen_t addrlen);

  客戶端需要調用connect()連接服務器,connect和bind的參數形式一致,區別在于bind的參數是自己的地址,而connect的參數是對方的地址。connect()成功返回0,出錯返回-1。

TCP之socket

 

  sockaddr數據結構

        注:更多精彩教程請關注武林網電腦教程欄目,武林網電腦辦公群:(已滿!)歡迎你的加入

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人黄色av免费在线观看| 国产精品网站入口| 成人国内精品久久久久一区| 97香蕉超级碰碰久久免费的优势| 日韩中文字幕国产| 最近2019中文字幕大全第二页| 国产精品99免视看9| 亚洲最大福利视频网站| 亚洲人成电影网| 欧美日韩亚洲精品一区二区三区| 国产午夜一区二区| 国产在线视频欧美| 韩国三级电影久久久久久| 不卡av电影在线观看| 中文字幕精品影院| 日韩成人在线视频观看| 亚洲欧美激情精品一区二区| 国产成人精品一区二区在线| 久久97久久97精品免视看| 国产日韩专区在线| 亚洲精品黄网在线观看| 国产精品1234| 国内精品国产三级国产在线专| 亚洲天堂免费视频| 亚洲xxxxx| 精品国产自在精品国产浪潮| 国产成人jvid在线播放| 国产精品欧美日韩| 欧美性极品xxxx做受| 亚洲夜晚福利在线观看| 亚洲午夜国产成人av电影男同| 日本中文字幕久久看| 国产成人欧美在线观看| 成人欧美一区二区三区黑人| 668精品在线视频| 日韩精品久久久久久福利| 九九九热精品免费视频观看网站| 热久久免费视频精品| 91精品国产高清自在线| 欧美又大又粗又长| 国产99视频精品免视看7| 欧美大尺度激情区在线播放| 亚洲国产精品成人精品| 亚洲成成品网站| 欧美日韩国产丝袜美女| 午夜精品一区二区三区在线| 性色av一区二区三区红粉影视| 亚洲国产精品成人精品| 最近日韩中文字幕中文| 国语对白做受69| 久久精品国产精品| 亚洲成人网久久久| 91久久精品在线| 国产一区二区三区丝袜| 日韩精品免费观看| 欧美精品18videos性欧| 欧美一区深夜视频| 国产欧美精品在线播放| 一区二区三区四区视频| 欧美另类交人妖| 社区色欧美激情 | 日本免费久久高清视频| 国产精品户外野外| 欧美视频免费在线| 欧美最猛性xxxxx免费| 欧美精品在线免费观看| 色婷婷av一区二区三区久久| 欧美激情图片区| 操日韩av在线电影| 日韩中文字幕免费看| 精品成人乱色一区二区| 日韩在线播放一区| 久久久视频在线| 欧美韩国理论所午夜片917电影| 国产精品视频网站| 亚洲成人精品在线| 国产一区二区三区在线免费观看| 国产在线999| 91情侣偷在线精品国产| 久久中文字幕一区| 久久精品一偷一偷国产| 日韩av综合中文字幕| 亚洲国产成人久久综合| 亚洲区bt下载| 欧美精品激情在线观看| 亚洲欧洲成视频免费观看| 国产精品旅馆在线| 国产一区二区三区在线免费观看| 91成人福利在线| 8x海外华人永久免费日韩内陆视频| 黑人欧美xxxx| 久久99久久亚洲国产| 亚洲欧美一区二区激情| 国产一区二区三区在线看| 欧美大全免费观看电视剧大泉洋| 欧美乱大交xxxxx另类电影| 欧美激情一区二区三区高清视频| 精品国产福利在线| 欧美黑人国产人伦爽爽爽| 主播福利视频一区| 欧美日韩高清区| 8x拔播拔播x8国产精品| 国产精品久久久久久av福利| www.欧美精品| 久久久久久久电影一区| 亚洲成人在线视频播放| 久久久免费电影| 夜夜嗨av一区二区三区四区| 亚洲欧美精品中文字幕在线| 精品亚洲一区二区三区在线播放| 精品国产欧美成人夜夜嗨| 自拍亚洲一区欧美另类| 亚洲欧美在线磁力| 91高清视频免费| 久久久精品一区二区| 亚洲高清免费观看高清完整版| 免费av在线一区| 国产精品久久视频| 久久久久久久久久久网站| 亚洲国产精彩中文乱码av| 久久久久久久久国产| 97超碰色婷婷| 日韩欧美在线第一页| 91国内产香蕉| 欧美在线视频免费| 国产成人精品久久久| 国产精品高清免费在线观看| 国产亚洲精品美女久久久久| 日韩欧美中文字幕在线播放| 中文字幕久热精品视频在线| 日韩欧美第一页| 欧美激情伊人电影| 亚洲欧洲一区二区三区在线观看| 久久成人这里只有精品| 2019中文字幕在线观看| 国产成人精品久久二区二区91| 亚洲欧美国产一区二区三区| 全亚洲最色的网站在线观看| 一本大道久久加勒比香蕉| 欧美性猛交xxxx免费看久久久| 日韩亚洲精品视频| 一区二区三区视频在线| 韩曰欧美视频免费观看| 国产精品扒开腿爽爽爽视频| 欧美黑人xxxⅹ高潮交| 国产美女久久久| 欧美黄色片视频| 成人黄色中文字幕| 国产精品久久久久久久久久免费| 日本aⅴ大伊香蕉精品视频| 69精品小视频| 日韩中文字幕在线播放| 68精品国产免费久久久久久婷婷| 午夜精品一区二区三区在线| 成人a视频在线观看| 亚洲有声小说3d| 91久久久久久| 91精品久久久久久久久中文字幕| 久久国产精品首页| 成人免费观看网址| 亚洲女人被黑人巨大进入| 日本免费一区二区三区视频观看| 日韩精品视频免费专区在线播放| 日本久久中文字幕|