歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux管理 >> Linux網絡

Linux網絡編程學習筆記

抽時間學習了Linux的網絡編程,以前只是對socket有個字面上的了解,具體的機制和用法一無所知。正好項目要用,學習下,做個筆記。

在Linux上,任何都可以當做文件來對待。獲得一個文件描述符,就可以對它進行讀寫操作。socket也是一樣。

socket在Linux下被翻譯成套接字,我覺得這個翻譯真的很爛,第一次接觸的人不可能知道套接字是個什麼東西。翻譯成插座反而直觀明了,更容易理解。

socket是為c/s模型設計的,也就是客戶--服務器模型。解決了進程間通信的問題。

下面主要說的面向連接的socket,無連接的socket就不講了。

簡單的將,服務端起一個socket,監聽一個端口,等待客戶端的連接,然後客戶端起一個socket,指向服務端的ip地址,端口號,向服務器發起連接請求。連接成功後就可以發送信息。看一下簡單的流程

前面講了socket可以當做一個文件來讀寫。那麼讀寫文件一般都是要獲得一個文件描述符,socket通信要獲得一個socket描述符,也可以理解為特殊的文件描述符,叫法不同而已。

通過socket函數獲得socket描述符

int socket(int domain , int type , int protocol);  

這個函數返回一個int型的值,就是socket描述符。如果發生錯誤則返回-1。

domain確定通信域,包括地址格式。通常被設為AF_INET代表IPv4因特網。

type確定socket類型,是無連接還是有鏈接的。

protocol通常設為0,表示按給定的域和socket類型選擇默認協議。比如domain為AF_INET,type為SCOK_STREAM時,默認協議就是TCP。

bind()函數綁定端口。 【Linux公社 http://www.linuxidc.com 】  聲明如下

int bind (int sockfd , const struct sockaddr *my_addr , int addrlen) ;  

其中,sockfd就是socket函數返回的socket描述符;my_addr是一個指向struck sockaddr的指針,包含地址信息:名稱、端口和ip地址。

addrlen一般設為sizeof(struct sockaddr);

connect()函數連接服務器地址,聲明如下:

int connect (int sockfd, const struct sockaddr *serv_addr, int addrlen);

返回一個int型的值,連接成功返回0,出錯則返回-1;

參數sockfd還是socket描述符,此時是請求連接的socket。

serv_addr就是服務器地址。

Copyright © Linux教程網 All Rights Reserved