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

Linux下使用SOCKET編程接口實現C/S通信

2019-09-09 08:14:53董偉梁
數碼世界 2019年5期

董偉梁

摘要:套接字(SOCKET)的客戶端/服務器(c/s)的通信模型,是基于TCP/IP協議的一種通信方式。本文結合c/s模型和SOCKET工作原理,闡述了socket原理以及如何實現Linux系統下的面向連接的socket通信。

關鍵字:SOCKET C/S Linux TCP/IP

引言

網絡編程的特點就在于它從客戶端和服務器兩個方面出發,具有監聽、請求和連接三個過程。Linux與Unix十分相似,它不僅網絡功能非常強大,而且穩定性高,很適合運用到網絡編程通信之中。SOCKET作為一種編程接口,在網絡協議和應用程序的聯系之中扮演者不可或缺的角色。

1 TCP/IP協議結構

TCP/IP協議由網絡層IP協議和運輸層TCP協議構成,是一種基本的網絡協議。其中IP協議管理互聯網設備的地址,TCP協議管理數據的傳輸。TCP/IP協議下,應用程序有兩種編程接口,傳輸層接口(TLI)和套接字接口(SOCKET)。現如今,SOCKET接口已經成為普遍認可的編程接口形式。

2 SOCKET通信原理與模型

SOCKET中文名稱套接字,是一種為適應TCP/IP程序開發而設計的一種接口形式。在一個具有兩端的通信進程中,一個套接字只能描述其中一端,所以需要其他套接字來描述另一端。

SOCKET在用于網絡通信時,取其幾個本意中“插座”的意思。套接字就好比是固定電話機和電話線之間的插座,或者說是接口。電話接口對應著一個的電話號碼,當乙使用電話機向甲尋求通話時,乙的電話機必須有一個確定的電話號碼,同時他也要知道甲的電話號碼。即至少在通信時雙方各擁有一個固定的SOCKET。這時如果甲處于空閑狀態,那么他可以選擇接聽乙的來電,雙方之間的通話連接的得以建立。乙發出的信息是通過電話機處理后傳向甲的,同時他收到的信息也是經過電話機接收和處理過的。整個過程總體如下:

(1)服務器和客戶端分別建立SOCKET接口。

(2)服務器處于監聽狀態。客戶端描述待連接服務器的SOCKET,發送連接請求。

(3)服務器作出相應,并返回端口號與SOCKET地址。連接建立。

在電話通話時,還存在一種特殊情況。在通話連接建立之后,是丙而不是甲接聽電話,那么乙就需要請求甲接聽電話。為了能夠區分端口,每個SOCKET都會有一個由系統分配的唯一的端口號。在實際SOCKET通信時,服務器中有多個軟件進程,當進程與一個端口相綁定后,系統就會把所要發給該進程的信息通過端口號定位到相應端口,再把信息準確無誤地發給相應進程。

SOCKET是為客戶端/服務器模型(C/S)而開發的。在這種模式下,客戶端的SOCKET并不是一定的,好比乙可以使用不同的終端來呼叫甲。然而服務器的SOCKET是固定的,同時對網絡中的每個客戶端來說,它的SOCKET是已知的。

c/s模型是一種最基本的SOCKET模型,根據不同的發起方向,可以分為面向無連接形式和面向連接形式。UDP協議用于面向無連接的通信形式,該協議提供盡最大努力的服務,但卻不具有一定的可靠性,只能通過超時報錯和重傳機制來維持數據傳輸的正確性,在網絡連接狀況良好時尚可,不能適應網絡惡劣的環境。而面向連接的通信采用TCP協議,它雖然相比UDP協議要耗費更多的資源,但在一定程度上維持了傳輸的穩定性,比較能夠以適應各種網絡環境下的傳輸工作。

對于面向連接和面向無連接,套接字類型與之相對應分為以下兩種形式:

(1)流式套接字(SOCKSTREAM)。

提供面向連接的傳輸服務。傳輸過程穩定性強,可靠性高,發生重復、丟失和損壞的坑能動性低,可以通過流量控制來把控傳輸,數據流服務對象多為連接上的應用。

(2)數據報套接口(SOCKDGARM)

提供面向無連接的傳輸服務。傳輸的數據以獨立的形式被包裝成數據包發送,可靠性較低,發生傳輸錯誤的概率較高。

3 Linux下的面向連接的SOCKET編程設計

面向連接的SOCKET即流式套接字,采用TCP協議。基本工作過程如圖1所示。

服務器: (1)使用socket()創建流式套接字。(2)通過bind()函數把相應網絡地址和套接字關聯起來。(3)使用listen()來監聽發送到端口的請求。(4)用accept()接受連接請求。無連接請求時,服務器進程處于停滯狀態,繼續等待客戶端。(5)連接建立后,新的流式套接字便會生成,這個套接字會與客戶端套接字關聯,而原套接字繼續處于監聽狀態。此時可通過read()和write()函數與客戶端通信。(6)使用close()可終止連接與服務。

客戶端:(1)使用socket()創建流式套接字。(2)通過connect()發送連接服務器請求。(3)連接建立后,可用read()和write()函數與服務器通信。(4)使用close()可終止連接與服務。

服務器和客戶端程序編寫完成后,使用Linux的程序編譯工具GCC和程序調試工具GDB分別對兩個程序進行處理。處理完成后,在兩個終端內分別運行客戶端程序和服務器程序,先令服務器處于監聽狀態,之后客戶端發送文本數據,即可成功建立C/S連接。如圖2所示。

4 結束語

套接字作為一種主要的編程接口形式,掌握它的編寫和使用十分重要。由于套接字基于c/s通信模型,編程時需要編寫服務器和客戶端兩部分程序,來實現主機之間的可靠通信。

參考文獻

[1]李德水.基于SOCKET編程接口的網絡通信[J],渭南師范學院學報,2005(02): 69-71.

[2]歐軍,吳清秀,裴云,張洪,基于socket的網絡通信技術研究[J].網絡安全技術與應用,2011(07):19_21.

[3]夏玲,王偉平,客戶端與服務器端的Socket通信[J],電腦知識與技術,2009,5(04): 812813.

主站蜘蛛池模板: 一本一道波多野结衣一区二区 | 欧美黄色a| 欧美午夜网站| 一级毛片免费的| 欧美人人干| 国产精品夜夜嗨视频免费视频| 啪啪免费视频一区二区| 免费国产不卡午夜福在线观看| 中文国产成人精品久久一| 国产美女一级毛片| 国产国产人成免费视频77777| 久久国产V一级毛多内射| 亚洲视屏在线观看| 欧美精品H在线播放| 国产日韩欧美中文| 尤物特级无码毛片免费| 激情网址在线观看| 色欲色欲久久综合网| 久久久精品国产SM调教网站| 美女视频黄频a免费高清不卡| 国产丝袜丝视频在线观看| 高h视频在线| 青青青国产在线播放| 中文无码毛片又爽又刺激| 亚洲欧洲日韩综合| 一级不卡毛片| 亚洲日韩精品伊甸| 日韩毛片在线播放| 亚洲六月丁香六月婷婷蜜芽| 婷婷五月在线| 亚洲精品午夜无码电影网| 尤物亚洲最大AV无码网站| 永久免费av网站可以直接看的| 伊人福利视频| 四虎亚洲精品| 国产午夜无码专区喷水| 亚洲性影院| 伊人久久大线影院首页| 夜夜操天天摸| 亚洲国产91人成在线| 欧美成人免费| 久久香蕉国产线看观看精品蕉| 97se亚洲| 日本道综合一本久久久88| 免费全部高H视频无码无遮掩| 亚洲av成人无码网站在线观看| 国产欧美成人不卡视频| 国产麻豆精品久久一二三| 亚洲精品无码高潮喷水A| 91麻豆精品国产91久久久久| 毛片免费在线视频| 精品少妇人妻av无码久久 | 亚洲熟女中文字幕男人总站| 国产无码网站在线观看| 精品久久高清| 国产在线精品美女观看| 中文字幕无码av专区久久| 亚洲成a人片| 青青草91视频| 精品成人一区二区三区电影| 日韩经典精品无码一区二区| 国产精品lululu在线观看| 免费观看男人免费桶女人视频| 在线视频97| 国产国产人在线成免费视频狼人色| 久久精品女人天堂aaa| 久久成人国产精品免费软件 | 亚洲 欧美 偷自乱 图片| 欧美日本激情| 毛片手机在线看| 国产主播在线一区| 91人妻日韩人妻无码专区精品| 91久久精品国产| 国产导航在线| 免费jjzz在在线播放国产| 国产精选自拍| 国产在线视频导航| 97国产精品视频人人做人人爱| 丰满人妻中出白浆| 久久国产拍爱| 久久99精品国产麻豆宅宅| 天天躁夜夜躁狠狠躁图片|