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僵死進程的產生與避免
男女平等進程中出現的新矛盾和新問題
主站蜘蛛池模板: 在线免费无码视频| 婷婷午夜影院| 妇女自拍偷自拍亚洲精品| 国产精品福利一区二区久久| 91在线国内在线播放老师| 欧美性色综合网| 成人一级黄色毛片| 午夜国产理论| 国产精品污视频| 亚洲第一视频免费在线| 日本一区高清| 国产精品久久久久久影院| 97国产精品视频人人做人人爱| 欲色天天综合网| 国产精品短篇二区| 成年片色大黄全免费网站久久| 欧美日韩国产精品va| 国产香蕉97碰碰视频VA碰碰看| 免费无码网站| 最新亚洲av女人的天堂| 国产精品 欧美激情 在线播放| 免费激情网址| 国产成人在线无码免费视频| 欧美精品导航| 又污又黄又无遮挡网站| 精品欧美视频| 久久人人爽人人爽人人片aV东京热 | 国产xxxxx免费视频| 最新亚洲人成无码网站欣赏网 | 91人妻在线视频| 孕妇高潮太爽了在线观看免费| 日本欧美一二三区色视频| 日本成人不卡视频| 伊人丁香五月天久久综合 | 国产午夜福利在线小视频| 国产精品亚洲а∨天堂免下载| 网久久综合| 一级全免费视频播放| 免费看a级毛片| 欧美成人精品一级在线观看| 91精品视频在线播放| 美女被操91视频| 日韩无码一二三区| 五月天天天色| 97久久精品人人| 日韩毛片免费观看| 亚洲人成成无码网WWW| 国产视频一二三区| 在线色国产| 日本一区二区不卡视频| 71pao成人国产永久免费视频| 国产你懂得| 色成人综合| 呦视频在线一区二区三区| 国产天天色| 久夜色精品国产噜噜| 天天色天天操综合网| 久久久久亚洲AV成人网站软件| 国产情侣一区二区三区| 狠狠色综合久久狠狠色综合| 国产农村妇女精品一二区| 国产一区在线视频观看| 久久中文无码精品| 国产精品第三页在线看| 国产精品真实对白精彩久久| 91精品国产91久久久久久三级| 欧美成人手机在线观看网址| 六月婷婷激情综合| 欧美一级黄色影院| 欧美97色| 熟妇丰满人妻| 国产成人高清亚洲一区久久| 国产欧美日韩免费| 看av免费毛片手机播放| 成人在线亚洲| 亚洲最大福利网站| 亚洲综合片| 操操操综合网| 内射人妻无码色AV天堂| 国产美女精品人人做人人爽| av无码一区二区三区在线| 国模沟沟一区二区三区|