首頁(yè) 考試吧論壇 Exam8視線(xiàn) 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實(shí)用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級(jí) | 職稱(chēng)英語(yǔ) | 商務(wù)英語(yǔ) | 公共英語(yǔ) | 托福 | 雅思 | 專(zhuān)四專(zhuān)八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語(yǔ) | 成人英語(yǔ)三級(jí) | 申碩英語(yǔ) | 攻碩英語(yǔ) | 職稱(chēng)日語(yǔ) | 日語(yǔ)學(xué)習(xí) | 法語(yǔ) | 德語(yǔ) | 韓語(yǔ)
計(jì)算機(jī)等級(jí)考試 | 軟件水平考試 | 職稱(chēng)計(jì)算機(jī) | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
華為認(rèn)證 | Java認(rèn)證
公務(wù)員 | 報(bào)關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問(wèn) | 導(dǎo)游資格
報(bào)檢員 | 教師資格 | 社會(huì)工作者 | 外銷(xiāo)員 | 國(guó)際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價(jià)格鑒證師
人力資源 | 管理咨詢(xún)師考試 | 秘書(shū)資格 | 心理咨詢(xún)師考試 | 出版專(zhuān)業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格考試會(huì)計(jì)證) | 經(jīng)濟(jì)師 | 會(huì)計(jì)職稱(chēng) | 注冊(cè)會(huì)計(jì)師 | 審計(jì)師 | 注冊(cè)稅務(wù)師
注冊(cè)資產(chǎn)評(píng)估師 | 高級(jí)會(huì)計(jì)師 | ACCA | 統(tǒng)計(jì)師 | 精算師 | 理財(cái)規(guī)劃師 | 國(guó)際內(nèi)審師
一級(jí)建造師 | 二級(jí)建造師 | 造價(jià)工程師 | 造價(jià)員 | 咨詢(xún)工程師 | 監(jiān)理工程師 | 安全工程師
質(zhì)量工程師 | 物業(yè)管理師 | 招標(biāo)師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價(jià)師 | 土地估價(jià)師 | 巖土師
設(shè)備監(jiān)理師 | 房地產(chǎn)經(jīng)紀(jì)人 | 投資項(xiàng)目管理師 | 土地登記代理人 | 環(huán)境影響評(píng)價(jià)師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價(jià)師 | 安全評(píng)價(jià)師 | 電氣工程師 | 注冊(cè)測(cè)繪師 | 注冊(cè)計(jì)量師
繽紛校園 | 實(shí)用文檔 | 英語(yǔ)學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪(fǎng)談 | 游戲

網(wǎng)絡(luò)工程師考試常用的socket程序解析

  Hey! Socket 編程讓你沮喪嗎?從 man pages 中很難得到有用的信息嗎?你想 跟上時(shí)代去做一做          Internet 程序,但是為你在調(diào)用 connect() 前的 bind() 的結(jié)構(gòu)而愁眉不展?…
            好了,我現(xiàn)在已經(jīng)來(lái)了,我將和所有人共享我的知識(shí)了。如果你了解 C 語(yǔ)言并想穿過(guò) 網(wǎng)絡(luò)編程的沼澤,那么你來(lái)對(duì)地方了。
            --------------------------------------------------------------------------------
         這個(gè)文檔是寫(xiě)成一個(gè)指南,而不是參考書(shū)。如果你剛開(kāi)始 socket 編程并想找一本入門(mén)書(shū),那么你是我的讀者。這可不是一本完全的 socket 編程書(shū)。
            --------------------------------------------------------------------------------
            平臺(tái)和編譯器
            這篇文章中的大多數(shù)代碼都在一臺(tái) Linux PC 上用 GNU 的 gcc 成功編譯過(guò)。 而且他們?cè)谝慌_(tái) HPUX 上用 gcc 也成功編譯過(guò)。但是注意,并不是每個(gè)代碼 片段都獨(dú)立測(cè)試過(guò)。
            --------------------------------------------------------------------------------
            目錄:
            什么是套接口?
            Internet 套接口的兩種類(lèi)型
            網(wǎng)絡(luò)理論
            struct--要么了解他們,要么等異形入侵地球
            Convert the Natives!
            IP 地址和如何處理他們
            socket()--得到文件描述符!
            bind()--我們?cè)谀膫(gè)端口?
            connect()--Hello!
            listen()--有人給我打電話(huà)嗎?
            accept()--"Thank you for calling port 3490."
            send() 和 recv()--Talk to me, baby!
            sendto() 和 recvfrom()--Talk to me, DGRAM-style
            close() 和 shutdown()--滾開(kāi)!
            getpeername()--你是誰(shuí)?
            gethostname()--我是誰(shuí)?
            DNS--你說(shuō)“白宮”,我說(shuō) "198.137.240.100"
            客戶(hù)-服務(wù)器背景知識(shí)
            簡(jiǎn)單的服務(wù)器
            簡(jiǎn)單的客戶(hù)端
            數(shù)據(jù)報(bào) Socket
            阻塞
            select()--多路同步 I/O,酷!
            參考資料
            Disclaimer and Call for Help

            --------------------------------------------------------------------------------


         Internet 套接口的兩種類(lèi)型
        什么意思?有兩種 Internet 套接口?是的。不,我在撒謊。其實(shí)還有很多,但是我可不想 嚇著你。我們這里只講兩種。 Except for this sentence, where I'm going to tell you that "Raw Sockets" are also very powerful and you should look them   up.
       好了,好了。那兩種類(lèi)型是什么呢?一種是 "Stream Sockets",另外一種是 "Datagram Sockets"。我們以后談到他們的時(shí)候也會(huì)用到 "SOCK_STREAM" 和 "SOCK_DGRAM"。 數(shù)據(jù)報(bào)套接口有時(shí)也叫“無(wú)連接套接口”(如果你確實(shí)要連接的時(shí)候用 connect()。) 流式套接口是可靠的雙向通訊的數(shù)據(jù)流。如果你向套接口安順序輸出“1,2”,那么他們將安順序“1,2”到達(dá)另一邊。他們也是無(wú)錯(cuò)誤的傳遞的,有自己的錯(cuò)誤控制。
        有誰(shuí)在使用流式套接口?你可能聽(tīng)說(shuō)過(guò) telnet,不是嗎?他就使用流式套接口。你需要你所輸入的字符按順序到達(dá),不是嗎?同樣,WWW 瀏覽器使用的 HTTP 協(xié)議也使用他們。實(shí)際上,當(dāng)你通過(guò)端口80 telnet 到一個(gè)WWW 站點(diǎn),然后輸入 “GET pagename” 的時(shí)候,你也可以得到 HTML 的內(nèi)容。
         為什么流式套接口可以達(dá)到高質(zhì)量的數(shù)據(jù)傳輸?他使用了“傳輸控制協(xié)議 (The Transmission Control   Protocol)”,也叫 “TCP” (請(qǐng)參考 RFC-793 獲得詳細(xì)資料。)TCP 控制你的數(shù)據(jù)按順序到達(dá)并且沒(méi)有錯(cuò)誤。你也許聽(tīng)到 “TCP” 是因?yàn)槁?tīng)到過(guò) “TCP/IP”。這里的 IP 是指 “Internet協(xié)議”(請(qǐng)參考 RFC-791.) IP 只是處理 Internet 路由而已。
        那么數(shù)據(jù)報(bào)套接口呢?為什么他叫無(wú)連接呢?為什么他是不可靠的呢?恩,有這樣的事實(shí):如果你發(fā)送一個(gè)數(shù)據(jù)報(bào),他可能到達(dá),他可能次序顛倒了。如果他到達(dá),那么在這個(gè)包的內(nèi)部是無(wú)錯(cuò)誤的。數(shù)據(jù)報(bào)也使用 IP 作路由,但是他不選擇 TCP。他使用“用戶(hù)數(shù)據(jù)報(bào)協(xié)議 (User Datagram  Protocol)”,也叫 “UDP” (請(qǐng)參考 RFC-768.)
         為什么他們是無(wú)連接的呢?主要原因是因?yàn)樗⒉幌罅魇教捉涌谀菢泳S持一個(gè)連接。 你只要建立一個(gè)包,在目標(biāo)信息中構(gòu)造一個(gè) IP頭,然后發(fā)出去。不需要連接。應(yīng)用程序有: tftp, bootp 等等。
        “夠了!”你也許會(huì)想,“如果數(shù)據(jù)丟失了這些程序如何正常工作?”我的朋友,每個(gè)程序在 UDP 上有自己的協(xié)議。例如,tftp協(xié)議每發(fā)出一個(gè)包,收到者發(fā)回一個(gè)包來(lái)說(shuō)“我收到了!” (一個(gè)“命令正確應(yīng)答”也叫“ACK”     包)。如果在一定時(shí)間內(nèi)(例如5秒),發(fā)送方?jīng)]有收到應(yīng)答, 他將重新發(fā)送,直到得到 ACK。這一點(diǎn)在實(shí)現(xiàn) SOCK_DGRAM應(yīng)用程序的時(shí)候非常重要。
            --------------------------------------------------------------------------------

文章搜索
軟件水平考試欄目導(dǎo)航
版權(quán)聲明:如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請(qǐng)注明出處。