linux下的C語言socket網絡編程

不管在Windows平臺下面還是在Linux平臺下面,網絡編程都是少不了的。在互聯網發達的今天,我們的生活基本上已經離不開網絡了。我們可以用網絡幹很多的事情,比如說IM聊天、FTP下載、電子銀行、網絡購物、在線遊戲、電子郵件的收發等等。所以說,對於一個軟件的開發者來說,如果說他不會進行網絡程序的開發,那真是難以想象的。


     在開始介紹網絡編程的方法之前,我們可以回憶一下計算機網絡的相關知識。目前爲止,我們使用的最多網絡協議還是tcp/ip網絡。通常來說,我們習慣上稱爲tcp/ip協議棧。至於協議棧分成幾層,有兩種說法。一種是五層,一種是七層,我個人本身也比較傾向於五層的劃分方法。大家可以通過下面的圖看看協議棧是怎麼劃分的。


    5、應用層
    4、傳輸層
    3、網絡層
    2、數據鏈路層
    1、物理層


     網絡的不同層次實現網絡的不同功能。物理層主要實現報文的成幀處理;數據鏈路層完成對報文的優先級的管理,同時實現二層轉發和流量控制;網絡層實現路由和轉發的功能,一方面它需要實現對報文的fragment處理,另外一方面它還需要對路由信息進行處理和保存;傳輸層實現報文的發送和接受,它利用計數、時序、定時器、重發等機制實現對報文的準確發送,當然這都是tcp的發送機制,而udp一般是不保證報文正確發送和接收的;應用層就是根據傳輸層的端口信息調用不同的程序來處理傳輸的內容,端口8080是http報文,端口21是ftp報文等等。上面的邏輯稍顯複雜,朋友們可以這麼理解,

     物理層關心的是如何把電氣信號變成一段報文;數據鏈路層關心的是mac地址、vlan、優先級等;網絡層關心的是ip地址,下一跳ip;傳輸層關心的是端口資源;應用層關心的是報文組裝、解析、渲染、解析、存儲、執行等等。

     目前關於tcp/ip完整協議棧的代碼很多,其中我認爲寫得比較好的還是linux內核/net/ipv4下面的代碼。如果朋友們對ipv6的代碼感興趣,也可以看看/net/ipv6的代碼。檔案如果朋友們對整個協議棧的代碼結構理解得不是很清楚,可以參考《linux網絡分析與開發》這本書。

     當然,作爲應用層,我們的其實考慮的不用這麼複雜。對於網絡程序編寫人員來講,所有網絡的資源只要和一個socket關聯在一起就可以了。當然在socket可用之前,我們需要爲它配置端口信息和ip地址。配置完了之後,我們就可以慢慢等待報文的收發了。所以一般來說,作爲服務器端口的處理流程是這樣的,

    a) 創建socket
    b) 綁定socket到特定的ip地址
    c) 對socket進行偵聽處理
    d) 接受socket,表明有客戶端和服務器連接
    e) 和客戶端循環收發報文
    f) 關閉socket


     作爲服務器程序而言,它要對特定的端口進行綁定和偵聽處理,這樣稍顯複雜。但是如果是編寫客戶端的程序,一切的一切就變得非常簡單了,

    a) 創建socket
    b) 鏈接服務器端地址
    c) 和服務器端的socket收發報文


     上面只是對網絡編程做了一個基本的介紹,但是好多的東西還是沒有涉及到,比如說:(1) 什麼時候該使用udp,什麼時候該使用tcp?(2) 如何把多線程和網絡編程聯繫在一起? (3) 如何把多進程和網絡編程聯繫在一起? (4) 如何利用select函數、epoll_create機制、非阻塞函數提高socket的併發處理效率? (5) linux內核是怎麼實現tcp/ip協議的? (6) 我們自己是否也可以實現協議的處理流程等等?

 

畢業後頭五年決定你的一生                                       10類最急需IT人才:Java開發者居首       

海量Android教程、開發資料和源碼                         給將成爲“Android高手”的10個建議 

成爲Java高手的25個學習目標--非常經典               Android 4.1果凍豆新特性詳解 

Java侵權訴訟Google獲勝,Android厚積薄發          面試必備:Android筆試總結 

Android高手必須掌握的28大內容和10個建議       Android平臺研發人才缺口30萬 

Android開發環境安裝和配置步驟詳細圖解            2012國內移動App開發者大調查結果 

Windows 7下搭建android開發環境步驟圖解        Android 4.0的30個突出的新特性 

Android高手要經過的6個階段和6個境界               linux下搭建Android開發環境步驟 

從IT菜鳥變爲“IT骨幹開發者”的11個建議          程序員編程技術迅速提高的終極攻略 

2012世界各國人均GDP排名,中國超泰國              2012年全國各省平均工資排行 

2012年中國大學高校排行榜(580強排名)         中國各省市面積和人口數量排名 

中國百萬開發者大調查:程序員的薪水不錯         Java高手需要越過的10座高山

周立功談嵌入式:我的25年嵌入式生涯                Android和Java語言的異同和關係 

華爲中國區手機銷量達千萬,80%爲智能機           谷歌Android碎片化嚴重

2012年中國各省GDP和人均GDP排名                 90後就業“錢景”:IT仍是最佳選擇

2012全球城市競爭力500強,69箇中國城市上榜   不要做浮躁的軟件工程師 

2012年世界500強,79家大陸香港臺灣公司上榜名單 給IT新兵的15個建議 

美國知名科技公司入門級軟件工程師的薪水排名  回顧Java經過的風風雨雨 

71道經典Android面試題和答案--重要知識點都涉及到了 

芯片巨頭海思和展訊:給中國芯片業帶來信心    海量經典Java教程、學習資料和源碼

 


 

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