Linux網路編程入門__Arduino

來源:互聯網
上載者:User

(一)Linux網路編程--網路知識介紹

Linux網路編程--網路知識介紹
用戶端和服務端
        網路程式和普通的程式有一個最大的區別是網路程式是由兩個部分組成的--用戶端和伺服器端.

用戶端
        在網路程式中,如果一個程式主動和外面的程式通訊,那麼我們把這個程式稱為用戶端程式。 比如我們使用ftp程式從另外一
        個地方擷取檔案的時候,是我們的ftp程式主動同外面進行通訊(擷取檔案), 所以這個地方我們的ftp程式就是用戶端程式。
服務端
        和用戶端相對應的程式即為服務端程式。被動的等待外面的程式來和自己通訊的程式稱為服務端程式。
        比如上面的檔案擷取中,另外一個地方的程式就是服務端,我們從服務端擷取檔案過來。
互為客戶和服務端
        實際生活中有些程式是互為服務和用戶端。在這種情況項目, 一個程式既為用戶端也是服務端。

常用的命令
        由於網路程式是有兩個部分組成,所以在調試的時候比較麻煩,為此我們有必要知道一些常用的網路命令
netstat
        命令netstat是用來顯示網路的串連,路由表和介面統計等網路的資訊.netstat有許多的選項.
        我們常用的選項是-na 用來顯示詳細的網路狀態.至於其它的選項我們可以使用協助手冊獲得詳細的情況.
telnet
        telnet是一個用來登入遠端程式,但是我們完全可以用這個程式來調試我們的服務端程式的.
        比如我們的伺服器程式在監聽8888連接埠,我們可以用
                telnet localhost 8888
        來查看服務端的狀況.
pingping 程式用來判斷網路的狀態是否正常,最經常的一個用法是
        ping 192.168.0.1
        表示我們想查看到192.168.0.1的硬體串連是否正常
TCP/UDP介紹
        TCP(Transfer Control Protocol)傳輸控制通訊協定是一種連線導向的協議, 當我們的網路程式使用這個協議的時候,
        網路可以保證我們的用戶端和服務端的串連是可靠的,安全的.

        UDP(User Datagram Protocol)使用者資料包通訊協定是一種非連線導向的協議,
        這種協議並不能保證我們的網路程式的串連是可靠的,所以我們現在編寫的程式一般是採用TCP協議的.

(二)Linux網路編程--初等網路函數介紹(TCP)

   Linux系統是通過提供通訊端(socket)來進行網路編程的.網路程式通過socket和其它幾個函數的調用,
   會返回一個 通訊的檔案描述符,我們可以將這個描述符看成普通的檔案的描述符來操作,這就是linux的裝置無關性的好處.
   我們可以通過向描述符讀寫操作實現網路之間的資料交流.
(一)socket
  
  int socket(int domain, int type,int protocol)

  domain:說明我們網路程式所在的主機採用的通訊協族(AF_UNIX和AF_INET等).
        AF_UNIX只能夠用於單一的Unix 系統處理序間通訊,
        而AF_INET是針對Internet的,因而可以允許在遠程
        主機之間通訊(當我們 man socket時發現 domain可選項是 PF_*而不是AF_*,因為glibc是posix的實現所以用PF代替了AF,
        不過我們都可以使用的).

  type:我們網路程式所採用的通訊協議(SOCK_STREAM,SOCK_DGRAM等)
        SOCK_STREAM表明我們用的是TCP 協議,這樣會提供按順序的,可靠,雙向,連線導向的位元流.
        SOCK_DGRAM 表明我們用的是UDP協議,這樣只會提供定長的,不可靠,不需連線的通訊.

  protocol:由於我們指定了type,所以這個地方我們一般只要用0來代替就可以了 socket為網路通訊做基本的準備.
  成功時返迴文件描述符,失敗時返回-1,看errno可知道出錯的詳細情況.


(二)bind
  int bind(int sockfd, struct sockaddr *my_addr, int addrlen)

  sockfd:是由socket調用返回的檔案描述符.

  addrlen:是sockaddr結構的長度.

  my_addr:是一個指向sockaddr的指標. 在中有 sockaddr的定義

        struct sockaddr{
                unisgned short  as_family;
                char            sa_data[14];
        };

  不過由於系統的相容性,我們一般不用這個標頭檔,而使用另外一個結構(struct sockaddr_in) 來代替.在中有sockaddr_in的定義
        struct sockaddr_in{
                unsigned short          sin_family;     
                unsigned short int      sin_port;
                struct in_addr          sin_addr;
                unsigned char           sin_zero[8];
        }
  我們主要使用Internet所以
        sin_family一般為AF_INET,
        sin_addr設定為INADDR_ANY表示可以和任何的主機通訊,
        sin_port是我們要監聽的連接埠號碼.sin_zero[8]是用來填充的.
  bind將本地的連接埠同socket

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.