網路程式設計——7. 優雅地斷開套接字連線
之前的方法不夠優雅是因為,我們直接呼叫了close或closesocket函式單方面斷開連線。
7.1 基於TCP的半關閉
TCP中的斷開連線過程比建立連線過程更重要,因為連線過程一般不會出現變數,但斷開過程有可能發生預想不到的結果。
單方面斷開連線帶來的問題
假如兩臺主機正在雙向通訊。當主機A傳送完最後的資料後,呼叫close函式斷開了連線,之後主機A再也無法接收主機B的傳輸資料。 斷開一部分連線指的是可以傳輸資料但無法接收,或者可以接收資料但無法傳輸。
套接字和流
把套接字建立後可進行資料交換的狀態看做是一種流。 為了進行雙向通訊,需要2個流。 其中一個主機的輸入流與另一個主機的輸出流相連,而輸出流則與另一主機的輸入流相連。 close函式將同時斷開這兩個流。
針對優雅斷開的shutdown函式
shutdown函式用來關閉其中的一個流
- SHUT_RD:斷開輸入流,套接字無法接收資料。即使輸入緩衝收到資料也會抹去,而且無法呼叫輸入相關的函式
- SHUT_WR:斷開輸出流,套接字無法傳輸資料。但如果輸出緩衝還留有未傳輸的資料,則將傳遞至目標主機。
- SHUT_RDWR:同時中斷IO流。
為何需要半關閉
相關推薦
網路程式設計——7. 優雅地斷開套接字連線
之前的方法不夠優雅是因為,我們直接呼叫了close或closesocket函式單方面斷開連線。 7.1 基於TCP的半關閉 TCP中的斷開連線過程比建立連線過程更重要,因為連線過程一般不會出現變數,但斷開過程有可能發生預想不到的結果。 單方面斷開連線帶來
TCP/IP網路程式設計 學習筆記_8 --優雅地斷開套接字連線
基於TCP的半關閉 TCP中的斷開連線過程比建立連線過程更重要,因為建立連線過程一般不會出現什麼大的變數,但斷開過程就有可能發生預想不到的情況,因此要準確的掌控。 單方面斷開連線帶來的問題 Linux的close函式和Windows的closesocke
Python之路(第三十一篇) 網路程式設計:簡單的tcp套接字通訊、粘包現象
一、簡單的tcp套接字通訊 套接字通訊的一般流程 服務端 server = socket() #建立伺服器套接字 server.bind() #把地址繫結到套接字,網路地址加埠 server.listen() #監聽連結 inf_loop:
《Unix網路程式設計》卷1:套接字聯網API(第3版):簡介、傳輸層、套接字程式設計
全書共31章+附錄。 計劃安排:吃透這本書,一天三章+原始碼,並實測程式碼做當天筆記,CSDN見。時間安排:計劃時間1.5個月 == 6個週末 == 12天。 2017.08.05 第01-03章:TCP/IP簡介、傳輸層、套接字程式設計簡介2017.08.06
《UNIX網路程式設計》 第三章 套接字程式設計簡介
一.套接字地址結構 IPv4的地址結構為sockaddr_in,IPv6為sockaddr_in6,鏈路協議sockaddr_dl,Unix域為sockaddr_un,儲存為sockaddr_storage。 **套接字地址結構總是以引用形式來傳遞! 1.
java網路程式設計學習筆記 流式套接字程式設計
tcp是Transmission Control Protocol即傳輸控制協議,是一種面性連線的協議。 在java中使用tcp程式設計需要用到兩個類 1.ServerSocket(代表伺服器) 2.Socket(代表客戶端) 伺服器端程式碼: //伺服器端在埠8888監聽 Serve
C語言網路程式設計(三)建立套接字通訊TCP
為了實現伺服器與客戶機的通訊,伺服器和客戶機都必須建立套接字。伺服器與客戶機的工作原理可以用下面的過程來描述。 (1)伺服器先用socket函式來建立一個套接字,用這個套接字完成通訊的監聽。 (2)用bind函式來繫結一個埠號和IP地址。因為本地計算機可能有多個網絡卡和IP
socket網路程式設計中常用的SO_KEEPALIVE套接字選項
使用getsocketopt( )可以得到當前套接字的選項內容使用setsocketopt( )函式設定應用程式需要使用的套接字選項SO_KEEPALIVE選項: 設定了這個選項後,如果TCP連
計算機網路自頂向下方法套接字程式設計作業
本部落格是針對,《計算機網路自頂向下方法》一書第二章後面套接字程式設計作業, 所有程式碼均已上傳至我的github:https://github.com/inspurer/ComputerNetwork 所有程式碼均本人親自編寫,有問題歡迎評論交流; 如需轉載請聯絡:[email
【Java TCP/IP Socket程式設計】----深入剖析----TCP套接字生命週期
目錄 簡介 TCP連線 關閉TCP連線 解調多路複用 --------筆記來自於書籍《Java TCP/IP Socket程式設計》 簡介 新的Socket例項建立後(無論是通過公有的建構函式,或通過呼叫ServerSoc
Nodejs簡單的套接字連線不工作
每2秒客戶機請求的資料app.get("/query_data"..我是連線到一個特定的IP地址+埠。 連線後,我傳送一個字串到這個地址來接收資料。 這工作得很好,但只有一次。 var socket = new net.Socket();app.get("/query_data", function (r
VM無法連線mks套接字連線嘗試次數太多
https://blog.csdn.net/wjunsing/article/details/78496224 https://jingyan.baidu.com/article/63f236287e1ec40208ab3d80.html 我的電腦 -> 右鍵 -> 管理 -&g
虛擬機器開啟時 ”VMware Authorization Service未執行“或“無法連線 MKS: 套接字連線嘗試次數太多;正在放棄”。
說明:可能你在升級或安裝Vmware的時候,不小心用360阻止了VMware的某個程式,可以用以下方法開啟。1.開啟windows工作管理員,選中“服務”選單欄,找到“VMware Authorizat
vmware workstation 無法連線 MKS:套接字連線嘗試次數太多正在放棄
轉自:http://blog.csdn.net/wjunsing/article/details/78496224 解決方法: 我的電腦 -> 右鍵 -> 管理 -> 服務和應用程式 -> 服務: 開啟下面的服務: 服務啟動成功後,重啟虛擬機
解決VMware虛擬機器報錯“無法連線MKS:套接字連線嘗試次數太多,正在放棄”
1.錯誤描述 在VMware中開啟虛擬機器時報錯: “無法連線MKS:套接字連線嘗試次數太多,正在放棄” 物理機作業系統: Windows 7 虛擬機器作業系統: Kali Linux
2.2.3 使用套接字連線
雖然你可以通過套接字連線來實現HTTP,但由於如下原因,你應該使用HTTP連線: > 套接字連線不支援黑莓移動資料系統(MDS)的特色功能,例如推送. > 使用套接字連線的黑莓裝置應用程式通常比使用HTTP連線的黑莓裝置應用程式需要更多的頻寬
虛擬機器出現錯誤:“無法連線MKS:套接字連線嘗試次數太多,正在放棄“,無法進入系統的解決方法
開發環境: 我在windows上使用的是VMware Workstation 14 Pro+Ubuntu16.04的組合進行開發。 原因: 自從將vm從12pro升級成了14pro之後就出現了這種問題,應該是14pro版本本身還有些問題吧。 解決方法:
監聽套接字 連線套接字的區別
摘要:對於伺服器程式設計中最重要的一步等待並接受客戶的連線,那麼這一步在程式設計中如何完成,accept函式就是完成這一步的。它從核心中取出已經建立的客戶連線,然後把這個已經建立的連線返回給使用者程式,此時使用者程式就可以與自己的客戶進行點到點的通訊了。 accept函式等
套接字連線的三種方式
如何使用套接字進行通訊呢?伺服器程式會首先啟動,然後它就只是等待來自客戶的請求.通常,由客戶程式發起一個連線,指向它希望連線的伺服器.當客戶發出請求時,伺服器可以接受這個連線,變即啟動一個特定的伺服器端套接字,通過它與客戶端套接字相連.為了支援這種操作模式.可以使用三種不同的套接字連線:1 :
win10 安裝VMware Workstation Pro 14出現無法連線 MKS: 套接字連線嘗試次數太多;正在放棄.
最討厭網上那些瞎BB,為了博眼球的部落格。(win10親測有效) 我也遇到這個原因。預設情況下,電腦的vt-x服務是開啟的。如果沒有開啟,請重啟電腦BIOS進行設定。但是相信我,大部分預設都是開啟的,