999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Socket通信過程原理及相關系統調用

2015-07-19 06:13:26王進文四川大學計算機學院四川成都610207
中國新技術新產品 2015年7期
關鍵詞:進程系統

王進文(四川大學計算機學院,四川 成都 610207)

Socket通信過程原理及相關系統調用

王進文
(四川大學計算機學院,四川 成都 610207)

通過介紹Socket的基本組成結構及其發揮的作用,論述Socket通信的整個過程并用C語言加以簡要實現,以闡明Socket通信過程原理及相關系統調用。

Socket;網絡通信;進程通信

1 Socket基本組成結構

Socket是相同主機進程之間或者不同主機進程之間進行通信的主流手段之一,兩臺計算機之間的網絡通信可以通過在各自的系統中創建一個Socket,進而利用它來實現相互之間的通信。

那Socket究竟是什么呢?一個基本的Socket就是由本機IP,本機進程端口,目的IP,和目的進程端口,以及輸入輸出緩沖組成的一個數據結構。其中前四個屬性分別用來標識本機信息和目的計算機的信息,輸入輸出緩沖用來暫存保存通信的數據。

2 Socket通信連接步驟

Socket連接建立之前主要進行兩項工作,第一項是連接建立前的兩個Socket的初始化工作,第二個是兩臺計算機通信時的“三路握手”。下面詳細說明這兩個過程(假設兩臺通信的計算機為客戶端-服務器模型,調用中用到的參數,請自行查看相關API):

(1)兩個Socket的初始化。

服務器端

首先,用C語言通過系統調用socket()函數來創建套接口。通過以下程序段便可以建立一個用TCP的Socket:

int listensockfd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)

其次,通過系統調用int bind ()函數來初始化Socket中的本地IP地址和本地端口號。通過以下語句,便可以初始化服務器端的Socket:

bind( listensockfd, (struct sockaddr*) &saServer, sizeof (saServer));

最后,我們通過系統調用listen()函數來將已經綁定了本機IP地址和程序端口號的Socket的狀態由主動(positive)轉換為被動(passive)(只有處于被動的Socket才會接受對方的信息)。并調用accept()函數來獲取已經準備好的套接字準備收取數據。通過以下程序段,便可以啟動監聽Socket,并返回Q1隊列中和客戶端“三路握手”完成的套接字,如圖1所示。

listen( listensockfd, 5 );

int acceptSocket = accept(listenSocketfd, NULL, NULL );

客戶端

通過Socket系統調用建立Socket,然后初始化客戶端的IP地址和端口號,并通過connect()函數將初始化好的IP地址和端口號的數據結構綁定在新建的Socket上,與服務器端不同的是這個數據結構是為了初始化客戶端的IP地址和進程端口,如圖1所示。

圖1

(2)兩臺計算機通信時的“三路握手”

第一次握手:客戶端調用connect()函數將目的地(服務器端)的IP地址和進程端口初始化的同時,給內核運輸層發出指令,使其將封裝好(其中包含完整的四元組)的數據包(同步包,下面簡稱SYN包),通過更底層的協議層向目的地(服務器端)傳送,以發出請求。

第二次握手:當目的地(服務器端)收到客戶端發送的SYN包時,如果請求可以通過,服務器端也通過運輸層封裝好一個包含通過請求的SYN+ACK包,否則封裝一個拒絕請求的SYN+NACK包發送給客戶端,于此同時,服務器內核自動創建一個Socket,并將已將創建好的監聽套接口的本地IP地址和進程端口拷貝到新創建的Socket中的本地IP地址和進程端口中,將第一次握手過程中的SYN包中的客戶端的IP地址和端口號拷貝在新創建的Socket中的目的地IP地址和端口號中,然后將新創建的Socket放入監聽Socket中的Q0隊列(用于放置內核為服務器和不同客戶端通信創建的未完成“三路握手”Socket)中。

第三次握手:當客戶端收到服務器端回應的SYN+ACK包時,客戶端需要再返回給服務器一個SYN包表示已經收到SYN+ACK包,與此同時,服務器將剛才放入Q0隊列的Socket放入監聽套接口的Q1隊列中(用于放置內核為服務器和不同客戶端通信創建的已經完成“三路握手”Socket),而客戶端通過系統調用accept()正是獲取的Q1隊列中的套接字。如圖2所示。

3 通過socke進行通信

服務器端通過系統調用recv()進行數據的獲取,客戶端可以通過調用send()進行數據的發送。

以下便是整個Socket通信的流程圖,如圖2所示。

圖2

[1] Jesse Storimer. TCP Sockets編 程[M].北京:人民郵電出版社,2013.

TP311

A

猜你喜歡
進程系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
半沸制皂系統(下)
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
我國高等教育改革進程與反思
教育與職業(2014年7期)2014-01-21 02:35:04
Linux僵死進程的產生與避免
男女平等進程中出現的新矛盾和新問題
主站蜘蛛池模板: 播五月综合| 欧美一区二区丝袜高跟鞋| 国产精品久久久久久久久| 国产精品成人一区二区| 国产欧美视频综合二区| a级毛片视频免费观看| 3344在线观看无码| 日韩午夜伦| 黄色网在线| 一级黄色欧美| 3344在线观看无码| 特级做a爰片毛片免费69| 无码AV动漫| 天堂亚洲网| 国产香蕉在线视频| 午夜国产不卡在线观看视频| 中文字幕在线永久在线视频2020| 国产免费观看av大片的网站| 视频二区国产精品职场同事| 91福利国产成人精品导航| 日韩av资源在线| 毛片最新网址| 国产在线拍偷自揄观看视频网站| 国产对白刺激真实精品91| 亚洲人成网站观看在线观看| 欧美一级99在线观看国产| 亚洲最猛黑人xxxx黑人猛交| 人妻无码中文字幕第一区| 色综合久久无码网| 最新日韩AV网址在线观看| 99久久精品国产精品亚洲| 好吊色妇女免费视频免费| 粗大猛烈进出高潮视频无码| 亚洲天堂区| 国产成人亚洲无码淙合青草| 亚洲免费福利视频| 亚洲国产精品成人久久综合影院| 91久久国产热精品免费| 怡红院美国分院一区二区| 欧美国产日产一区二区| 国产污视频在线观看| 99手机在线视频| 91精品国产综合久久香蕉922| 亚洲日韩Av中文字幕无码| 欧美成人午夜视频免看| 夜夜操狠狠操| 久久婷婷六月| 欧美69视频在线| 永久毛片在线播| 国产免费网址| 亚洲精品第五页| 伊人久久大香线蕉综合影视| 国产精品无码翘臀在线看纯欲| 亚洲精品国产综合99| 伊人久久婷婷| 亚洲男人天堂网址| av一区二区三区高清久久| 在线视频一区二区三区不卡| 一级黄色片网| 免费无码又爽又刺激高| 在线免费不卡视频| 亚州AV秘 一区二区三区| 国产无人区一区二区三区| 成年A级毛片| 97av视频在线观看| 亚洲日韩精品伊甸| 亚洲福利一区二区三区| 伊人91在线| 午夜爽爽视频| 性激烈欧美三级在线播放| 国产精品久久久久久搜索| 美女无遮挡免费视频网站| 区国产精品搜索视频| 一本久道久久综合多人| 在线a视频免费观看| 国产拍在线| 亚洲日韩精品欧美中文字幕 | 色婷婷视频在线| 欧美午夜理伦三级在线观看| 亚洲第一区精品日韩在线播放| 午夜福利无码一区二区| 91成人免费观看在线观看|