1. 程式人生 > >UNIX網絡編程-第一部分(簡介)-筆錄

UNIX網絡編程-第一部分(簡介)-筆錄

unix網絡編程第一部分-簡介

 緒論:

10000小時定律已成,現今將之前所學知識溫顧,所學所感所想記錄第一話:

1.在學習軟件編程的時候,我們第一步是先學會一門語言,然後實現一個小模塊(封裝成類,函數等),來完成某個具體功能或解決某個具體問題。然後在參與真正項目的時候,往往涉及到大量的封裝

,模塊與模塊之間的如何設計,如何使得可擴展性更好等又涉及到設計模式的問題。但模塊與模塊之間並不一定只在一個進程中,更不一定在一臺機器之上,那麽當我們需要進程與進程之間進行交流,不同網絡節點之間需要交流之時,應該如何處理呢。進程與進程的通信(IPC inter-process communication),推薦UNIX進程間通信(卷二),我們首先來討論網絡節點之間的通信(UNIX網絡編程卷1

)。這幾本書主要向我們描述了UNIX是如何處理上述問題的,以及常用系統調用,講述了部分原理,雖然其中有很多接口在實際編程中被封裝或者是被取代,但依舊具有很強的借鑒意義。


 理解網絡通信程序的步驟:

1.確定不同網絡節點之間程序通信所用到的協議。

什麽是通信協議?這是個很大的概念。計算機四大基礎課之一--《計算機網絡》本應該是對這個問題的詳盡描述。但本科書籍中還是講解太淺,以抽象講述為主,並沒有詳盡展開(以後慢慢講解)。簡單來說,(參見百科)通信協議是指雙方實體完成通信或服務所必須遵循的規則和約定。通過通信信道和設備互連起來的多個不同地理位置的數據通信系統,要使其能協同工作實現信息交換和資源共享,它們之間必須具有共同的語言。交流什麽、怎樣交流及何時交流,都必須遵循某種互相都能接受的規則。這個規則就是通信協議。

  對於剛入門的朋友來講,就算看完了剛才的講解,還是只能有個大致概念,我舉個不恰當但能被容易理解的例子: 通過網絡傳輸,通信雙方都可以認為是基於二進制數據操作的。也就是說,發送方發送了一連串的二進制數據,通過網絡,接收方接收到了這串二進制數據(例如  10001001),然後這個8位二進制中的每一位或者每幾位代表了某種意思,具體代表哪些意思,怎麽解析,我們事先就可以指定發送方和接收方都遵循這個 規則。(當然,通信協議還規定了很多其他的東西,如通信時間 排序規則等等,此處不一一舉出)

2.確定網絡模型,通常是client-server(即哪方發送請求,哪方接受請求處理後返回結果)(註:此處的client和server都應該看成是獨立的進程)

   client-server模型是最常見的模型(但網絡通信中還有其他模型,以後碰到再詳解)。需要明確的是,服務器進程一般都要寫為守護進程(暫且理解成要在服務器上長時間運行,不主動關閉),在這裏我想到了一個插曲: 玩c/c++的新手童鞋們經常會碰到一個問題,他們經常會忘記釋放申請的內存導致內存泄露,然而他們還是一臉無所謂,因為很多書籍中有這麽一句話,在這個 程序整體運行結束後,操作系統會自動回收所有相關資源(包括內存),於是他們每次很淡定,不是很在意手動釋放內存。大哥。。你這個程序是運行一次完了就關 閉了,然而若是寫服務器端程序,這個內存泄露的口子只會越來越大,最終結果你懂的~~

以常見的web服務為例

其中還涉及到了許多其他問題,比如,如何使得一個服務器同時與多個客戶通信,涉及到的代碼層面會碰到什麽問題等等。後續將慢慢詳解。下一篇將帶領大家查看一個簡單通信程序實例。





 


本文出自 “12950782” 博客,請務必保留此出處http://12960782.blog.51cto.com/12950782/1936589

UNIX網絡編程-第一部分(簡介)-筆錄