沉默3年了,該寫點什麼呢——什麼是網絡通訊?

確確的說,應該是“什麼是tcp通訊”。我不說嚴謹的學術定義,其實我那學歷水平也說不出來,嘿嘿。網絡通訊嘛,其實兩個socket連接就OK了,是嗎?!過去這麼多年,處理解決了很多tcp通訊的問題,是應該寫點東西了,要不然這個博客就沉陷下去了。


先看看這小段代碼:

......

Send(s, buf1, len1, 0);

Send(s, buf2, len2, 0);

CloseSocket(s);


一般情況下,這段代碼是沒有問題的。堵塞Send返回之後,基本上可以很有把握的說數據已經達到了對方的Socket底層,但是值得注意的是:也僅僅是到達socket底層而已,並不意外着一定到達了對方的應用層。對於重要的數據傳輸,這不是嚴謹的,因爲我們無法保證在應用層獲得數據之前一切都是正常的,更不能保證CloseSocket之後對方的socket底層還能有效保留數據等待應用層讀取(儘管你是使用Recv堵塞讀取數據,其實socket底層也是異步和多線程的)。


重要的數據通訊,需要具有這樣的協議要求:連接握手,應答機制,心跳維持,優雅斷開。連接握手:可能需要交換驗證信息等,服務器需要確定合法的連接。應答機制:保證了數據100%達到對方的應用層或已經被對方處理了。心跳維持:可以讓服務器避免出現由於空或假連接導致耗盡服務器資源的情況(切記,它是保護服務器端,因此一定是由客戶端發送)。優雅斷開:這是確保數據已經都發送到了對方的應用層,對方也已經回覆了斷開請求。


其實我也寫喜歡堵塞,我也喜歡傳輸一個文件開一個連接,不用定義這麼多的協議指令......


晚了困了,網線和路由是網絡的有形部分,socket(TCP/IP)是網絡的無形部分,那些複雜的應用層協議指令纔是通訊的生命部分。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章