計算機網絡dst,計算機網絡基礎課程—Socket接口

什么是TCP/IP------本課程的主要部分

TCP/IP如何工作-----TCP/IP軟件結構與實現

如何用TCP/IP-------TCP/IP應用程序編程接口

前面說過,TCP/IP標準并不指定應用程序與TCP/IP協議軟件的接口,但并不是說沒有提供任何指導,首先,它指定了一些必須具有的操作。這包括:

–為通信指定本地資源

–指定本地和遠程通信端點

–初始化連接(客戶端)

–等待連接(服務器端)

–發送和接收數據

–生成緊急數據

–中斷通信

–……

–在通信結束時釋放本地資源

同時,TCP/IP標準還指定了一個概念層接口,它是作為一個闡述如何使用TCP/IP的例子,它包含了一系列過程和函數,標準建議了每個過程和函數所需要的參數及其所執行操作的語義,但沒有進一步指定數據表示的細節。

仔細的接口通常由操作系統來定義,只要完成TCP/IP標準中的功能,可以有不同的細節選擇。這樣不同的操作系統的應用程序編程接口是各不同的。

–Berkeley Software Distribution UNIX 的 Socket 接口是廣泛使用的

–Windows的接口定義Winsock接口

–System V的接口定義TLI接口

–……

操作系統提供的應用程序編程接口又分為兩類:

–直接由操作系統內核提供的系統調用

BSD UNIX socket

–在操作系統外以庫函數的方式提供的各種可調用函數

Windows socket

一、系統調用

–當應用程序要進行系統調用,首先是把控制交到系統調用接口,接口再把控制轉到操作系統,由操作系統調用相應的內部進程來執行請求的操作,內部進程完成后,操作系統再通過調用接口把控制權返回應用程序

7e418ef5b3abe5bb3f7480b45beb81ce.png

在TCP/IP協議加入操作系統后,操作系統可以有兩種方式來幫助應用程序訪問內核的TCP/IP協議

–用一種新的系統調用

–用通常的I/O調用來訪問TCP/IP

完全用第一種方案較少,因為這樣要把所有的概念操作都重新設計

采用第二種方案:通過重載通常的I/O調用使得訪問協議與通常的I/O一樣。

較多采用混合方法:易重載的重載,不易重載的用新函數。

UNIX的基本的I/O函數(一般設備或文件的I/O操作)

–open:為I/O操作準備設備或文件

–close:終止使用前面打開的設備和文件

–read:從輸入設備或文件獲取數據

–write:向輸出設備或文件傳輸數據

–lseek:移到設備或文件指定的位置

–ioctl:控制設備或訪問它的軟件

一旦打開某個設備或文件,就給它分配一個描述號,

–int desc;

–desc=open(“filename”,O_RDWR,0)

在后面,應用程序將使用 desc 來對該文件進行標識并進行讀寫操作

–read(desc,buffer,128)

完成相關操作后,關閉

–close (desc)

–在BSD UNIX中,使用重載上述的I/O調用來實現對協議的部分訪問。同時又一些功能不能重載,需要設計一些新的函數

BSD UNIX Socket 使用混合模式

BSD UNIX Socket 在設計時還考慮到支持多種通信協議,因此,協議族名稱往往是一些函數的參數。TCP/IP是一個單一的協議族

BSD UNIX Socket 要求必須使用服務類型來指定操作而不是指定某個協。

以下為幾個在完成socket進程通信機制中需要的系統調用(以下以BSD UNIX為例)

sockid=socket(family,type,protocol) //創建socket

–其中: family:地址族,即協議族

–Type:協議服務類型

–Protocol:具體協議

–sockid:UNIX用于標識該socket的整數,

bind(sockid,localaddr,addrlen)

//將本地socket地址(本地地址,本地端口)與所創建的scoket號聯系起來,

–其中localaddr:指向socket地址結構的指針,TCP/IP的socket地址結構:

struct sockadd_in{

u_short sin_family; //指明協議族

u-short sin_port; //端口號

struct in_addr sin_addr; //IP地址

char sin_zero[8]; //未用

}

–addrlen:地址結構的長度(以字節為單位)

connect(sockid, destaddr, paddrlen)

//用于建立socket連接

–sockid:欲建立連接的本地socket號

–destaddr:指向對方socket地址結構的指針

–paddrlen:對方socket地址長度

listen(sockid,quelen)

//服務器用于確認它愿意建立客戶請求的連接

–sockid:本地socket號,服務器將從它上面接收客戶請求

–quelen:請求隊列的長度,

newsock=accept(sockid, clientaddr, paddrlen)

//用于面向連接的服務器建立socket連接

–sockid:欲建立連接的本地socket號

–clientaddr:指向客戶socket地址結構的指針

–paddrlen: 客戶socket地址長度

–newsock:一個新的socket號

發送數據的系統調用(write)

–面向連接

write(sockid,buff,bufflen)//緩沖發送

writev(sockid,iovector,vectorlen)//集中發送

send(sockid,buff,bufflen,flags)//可控緩沖發送

–面向無連接

sendto(sockid,buff,bufflen,flags,dstadd,addrlen)//可控緩沖發送

sendmsg(sockid,message,flags)//可控緩沖發送

接收數據的系統調用(read)

–與發送的調用是一一對應的,有些參數所不同

其它與socket有關的系統調用

此外socket調用中還有一些給程序員用的實用函數,例如整數轉換函數等等以實現不同體系結構的兼容性。因為BSD UNIX socket調用是支持多協議族的。(這也是socket函數復雜、受到批評的一個原因)

調用的時序關系:

3cd7d4c90e4edf8faa77bfcce1c82376.png

ef9b566b7dc74225205525c88322ce00.png

利用socket實現并發服務器的例子:

bdf186e8012d70083572480d1f492204.png

int initsockid,newsockid;

if((initsockid=socket(…))<0)

error(“cant creat scoket”);

if(bind(initsockid,localaddr,addrlen)<0

error(“bind error”);

if(listen(initsockid,5)<0)

error(“listen error”);

for(;;){

newsockid=accept(initsockid,…)

if(newsockit<0)

error(“accept error”);

if(fork()==0){

close(initsockid);

do(newsockid);

exit(o);

}

close(newsockid);

}

除了完成socket的系統功能調用,BSD UNIX還提供了一套預定義的符號常量和數據結構聲明,應用程序可以用它們來聲明數據、指定變量。例如:符號常量SOCK_DGRAM 和 SOCK_STREAM分別說明采用樹舉報服務還是流服務

這些聲明定義在兩個頭文件中:

–#include

#include

二、在操作系統外以庫函數的方式提供可調用函數

7d4ae2745d13068bed36ca5b749c483d.png

f44f0398fd41b368bb93190c9303d4c6.png

Winsock API函數

–WSAStartup:初始化scoket庫

–WSACleanup: 終止使用scoket庫

–scoket:創建

–connect:

–closesocket:

–bind

–listen

–accept

–……

其它

舉報/反饋

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532181.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532181.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532181.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python輸入圓的半徑公式_[圖文]鐵路曲線正矢的計算公式

一、圓曲線正矢的計算1.1 圓曲線正矢的計算公式取圓曲線上兩點拉一直線,叫做弦。弦上任意點至曲線上的垂直距離叫矢或叫矢距。在弦中央點的矢距叫正矢(下圖)。AB一弦;AC、CB一半弦;CD一正矢;EF一矢距正矢計算公式為其中: f-正矢 C-弦長 R-半徑 式中單位均為m。公式用文字表示即…

2021高考成績查詢抖音,2021抖音很火的高考唯美的文案20個

1、用孜孜不倦去追求&#xff0c;拼搏的精神來鉆研&#xff0c;讓知識澆灌心田&#xff0c;用激情去迎接困難&#xff0c;用青春寫意一片贊嘆&#xff0c;祝愿大學生活充實飽滿&#xff0c;學富五車&#xff0c;才高八斗&#xff0c;開創美麗的明天。2、如食糖蜜心里甜&#xf…

docker 安裝nacos_康過來!Nacos配置和管理微服務的使用

Nacos 具有如下特性:服務發現和服務健康監測&#xff1a;支持基于DNS和基于RPC的服務發現&#xff0c;支持對服務的實時的健康檢查&#xff0c;阻止向不健康的主機或服務實例發送請求&#xff1b;動態配置服務&#xff1a;動態配置服務可以讓您以中心化、外部化和動態化的方式管…

HTML5中volume樣式自定義,html5中關于volume屬性的使用詳解

Audio對象屬性&#xff1a; volume 描述&#xff1a;設置或返回音頻的音量&#xff0c;取值范圍(0——1)下面是我做的音樂播放器如何調節音頻音量的代碼&#xff1a;//增加切換音量事件(function(){var height $("#myAudio ul.control li.volume .alert-box .volume-wrap…

matlab中如何調用gpu進行并行計算_極致安卓-Termux/Aid learning開啟WebGL手機GPU并行計算...

在我的之前的測評中&#xff0c;我利用Termux和Aid Learning測試過基于C/C的openmp并行程序&#xff0c;基于Java的并行程序&#xff0c;還有基于MPI以及基于Java的分布式集群并行。但是很遺憾&#xff0c;一直無法成功開發基于OpenCL的GPU并行編程。這是主要是因為Android并沒…

python默認編碼方式_關于設置python默認編碼方式的問題

2019-8-27 07:45:36 本帖最后由 傻紙 于 2019-8-27 10:02 編輯 查了一會資料得出的結論是如果你用的是python3.x&#xff0c;那么就最好別去設置sys.defaultencoding或者sys.stdout.encoding 記住在需要編碼的時候用encode&#xff0c;解碼的時候decode就可以了。。。 這個問題…

計算機科學與技術是屬于什么學科,計算機科學與技術專業屬于什么大類 屬于哪個學科...

近日&#xff0c;有很多人咨詢小編計算機科學與技術專業屬于什么大類 屬于哪個學科&#xff1f;現在小編統一回復一下大家計算機科學與技術專業屬于工學類&#xff0c;下面是關于計算機科學與技術專業詳細的介紹。1計算機科學與技術專業門類及學科介紹專業名稱專業代碼門類學科…

matlab imread_MATLAB圖像處理:29:在幾何變換輸出中指定填充值

本示例說明如何指定imwarp執行幾何變換時使用的填充值。執行轉換時&#xff0c;輸出圖像中通常會有一些像素不屬于原始輸入圖像。必須為這些像素分配一些值&#xff0c;稱為填充值。默認情況下&#xff0c;imwarp將這些像素設置為零&#xff0c;并顯示為黑色。使用FillValues參…

小學生學計算機,學計算機對小學生的好處

內容提要:隨著計算機應用的日益社會化和家庭化,計算機在人們工作、學習和生活等各個方面正發揮著越來越重要的作用&#xff0c;而計算機應用基礎也相應成為現代社會人們必修的文化基礎課。現在的小學生將是未來的創新型人才&#xff0c;他們的計算機水平如何&#xff0c;直接關…

micopython 18b20_MicroPython控制8*8LED點陣顯示溫度

MicroPython顧名思義就是可以在單片機上跑的Python&#xff0c;借助Micro Python&#xff0c;用戶完全可以通過Python腳本語言實現硬件底層的訪問和控制&#xff0c;比如說控制LED燈泡、LCD顯示器、讀取電壓、控制電機、訪問SD卡等。目前支持MicroPython的開發板有好幾種&#…

計算機組裝維護文獻,組裝計算機論文,關于《計算機組裝維護》課程教學相關參考文獻資料-免費論文范文...

導讀:此文是一篇組裝計算機論文范文,為你的畢業論文寫作提供有價值的參考。【摘 要】計算機硬件知識的教與學對于計算機相關專業的學生來說,重要性是不言而喻的.由于教學資源缺乏,面對這門以操作性強為特點的課程,如何利用學校有限的條件培養出符合職業資格標準的學生是該專業教…

ip變更會影響賬號登陸嗎_【教程】PUBG賬號被盜導致封禁申訴解封教程

很多朋友詢問PUBG在被盜號后被盜號者開掛導致永封該如何申訴解封&#xff0c;現在結合一些玩家被盜號及成功申訴的經歷&#xff0c;詳列一下步驟。本方法只適用于被盜后開掛導致封禁的賬號&#xff0c;那些自己開掛被封的孤兒不用往下看了。一.先向steam客服申訴 找回自己的ste…

html5專著,參考文獻專著

參考文獻類型&#xff1a;專著[M]&#xff0c;會議論文集[C]&#xff0c;報紙文章[N]&#xff0c;期刊文章[J]&#xff0c; 學位論文[D]&#xff0c; 報告[R]&#xff0c; 標準[S]&#xff0c; 專利[P]&#xff0c;論文集中的析出文獻[A]關于你又知道多少呢?下面是小編為大家整…

濾鏡怎么調_手機、電腦怎么剪輯視頻?真心求推薦實用工具

自從加入了短視頻自媒體運營這個行業以后&#xff0c;我就開始接觸到各種各樣的手機、電腦視頻剪輯、制作軟件&#xff0c;用它們來處理、完成被安排到的工作任務。很多時候&#xff0c;我也用它們來剪視頻&#xff0c;借此來練練手、積累下素材。記得剛進入這個行業的時候&…

2021計算機基礎知識題庫,2021~2021計算機基礎知識練習題

2021~2021計算機基礎知識練習題 2021~2021計算機基礎知識練習題 北京聯合大學 2021~2021計算機基礎知識練習題 一、選擇題 1.記錄在存儲介質上的一組相關信息的集合稱為______。 A)程序 B)磁盤 C)軟件 D)文件 2.當一個文件更名后&#xff0c;文件的內容會______。 A)完全消失 B…

計算機背板知識,你知道背板的選購技巧嗎?

原標題&#xff1a;你知道背板的選購技巧嗎&#xff1f;背板就是母板&#xff0c;子板插在上面構成系統&#xff0c;計算機背板說成背板也成立&#xff0c;只不過背板更多的知識線路板而已&#xff0c;沒有實際的器件&#xff0c;只起信號通路作用。背板在設備機箱的后面。一般…

git 切換分支_git 入門教程之分支總覽

分支就是一條獨立的時間線,既有分支,必有主干,正如一棵樹談到樹枝,必有樹干一樣的道理.我們先前對git 的全部操作默認都是在主干上進行的,這個主干也是一種特殊的分支,名為 master 分支.無論是穿越歷史還是撤銷更改,我們都或多或少接觸過時間線,git 管理的版本串在一起就組成了…

計算機應用技術專業全國排名,計算機應用技術專業全國排名

排名學校名稱等級排名學校名稱等級排名學校名稱等級1清華大學A19武漢大學A37合肥工業大學A2浙江大學A20華南理工大學A38蘇州大學A3北京航空航天大學A21電子科技大學A39江蘇大學A4華中科技大學A22大連理工大學A40大連海事大學A5北京大學A23天津大學A41中山大學A6上海交通大學A24…

python中加減乘除是什么數據類型_python中,數字類型計算

說明&#xff1a; 今天在看python數字類型的操作&#xff0c;在此記錄下。 操作過程&#xff1a; 1.數字的加減乘除 >>> 2 2 4 >>> 4 - 2 2 >>> 2 - 4 -2 >>> 2 * 2 4 >>> 2 / 2 #除法的結果會返回小數的結果&#xff0c;如果是…