Socket程式設計基礎 Socket API介紹

2021-04-13 06:38:15 字數 2938 閱讀 9418

1. 建立套接字: socket socket(socket af, int type , int protocol);        出錯碼(socket_error).

af(address family):

指示位址族. windows僅支援af_inet(tcp/ip位址)

type:型別描述.

sock_stream:流socket,定義一種可靠的,面向連線的服務,tcp.

sock_dgram:資料報socket,定義一種無連線的報務,  udp.

sock_ram:原始socket.主要用於一些協議的開發和測試新的網路協議,對ip或者icmp直接訪問。ip欺騙  就需要用到。

sock_seqpacket:定序分組socket. sock_rdm:可靠傳送的訊息。

protocol:套接字所用的協議。

ipproto_ip 0 ipproto_icmp 1  ipproto_tcp 6  ipproto_udp 17  ipproto_raw 255

改變socket屬性: int setsockopt(socket sock_id, int level, int optname, cont char far *optval, int *optlen);

sock_id:   標識乙個套接字.

level:         選項定義的層次,目前僅支援sol_socket,ipproto_tcp層次。

optname: 需設定的選項.

optval:       指標,指向存放選項值的緩衝區.

optlen:      緩衝區的長度.

2. 繫結ip、埠: int bind(socket sock_id, struct sockaddr *local_addr, int addr_len);     

sock_id: 本地的socket識別符號

local_addr: 指向有本機ip、埠號等資訊的sockaddr型別的指標。

addr_len: sockaddr的長度。 常用sizeof(struct sockaddr).

3. 接受乙個連線: int accept(socketsock_id, struct sockaddr *client_addr, int  *addr_len);

sock_id:        本地socket識別符號.

client_addr:  乙個指向客戶socket位址結構的指標.

addr_len:      乙個指向值為sizeof(struct sockaddr_in)的整型的指標變數.

4. 與遠端伺服器建立乙個tcp連線: int connect(socketsock_id, struct sockaddr *serv_addr, int addr_len);

sock_id:       發出請求的socket識別符號.

serv_addr:  乙個指向伺服器socket位址結構的指標.

addr_len:   伺服器的socket位址長度.

5. 監聽是否有服務請求: int listen(socket sock_id, int quelen);

sock_id:    本地的socket識別符號.

quelen:      請求佇列中執行的最大請求數。

6.面向連線資料傳輸: int send(socket sock_id, const char far *buffer, int buff_len, int flags);  //可控緩衝傳送

sock_id:   本地socket識別符號.

buffer:       乙個指向傳送緩衝區的指標.

buff_len: 傳送緩衝區的大小.

flags:       呼叫的執行方式.   --0

msg_oob 0x1                  //帶外資料,也稱為tcp緊急資料. 

msg_dontroute 0x4  //不要將包路由出去.

int recv(socket sock_id, const char far *buffer, int buff_len, int flags);  //可控緩衝接收

sock_id:  發出請求的socket識別符號.

buffer:     乙個指向接收緩衝區的指標.

buff_len: 接收緩衝區的大小.

flags:       指定呼叫方式.   --0

msg_oob 0x1                  //帶外資料,也稱為tcp緊急資料. 

msg_peek 0x2  //使有用的資料複製到緩衝區內,但並不從系統緩衝區內刪除。

7.不面向連線資料傳輸:  int sendto(socket sock_id, cont char far *buffer, int buff_len, int flags, const  struct sockaddr far *to, int to_len);

to:          指標, 指向目的套接字的位址結構(sockadddr 結構).

to_len:  所指位址結構的長度.

int recvfrom(socket sock_id, cont char far *buffer, int buff_len, int flags, const  struct sockaddr far *from,     int from_len);

from:          指標, 用來接收傳送方套接字位址結構資訊.

from_len:  指向sockaddr位址的長度.

8. 關閉乙個套接字: int closesocket(socket sock_id);

禁止在乙個套接字上進行資料的接收與傳送: int shutdown(socket sock_id, int how);

how:  用於描述禁止哪些操作. 

取值: sd_revieve: 不允許再呼叫接收函式.

sd_send:      不允許再呼叫傳送函式.

sd_both:      取消連線兩端的收發操作.

socket程式設計基礎

對於socket在這裡我不想究其歷史,我只想說其時它是一種程序通訊的方式,簡言之就是呼叫這個網路庫的一些api函式就能實現分布在不同主機的相關程序之間的資料交換.socket中首先我們要理解如下幾個定義概念 二是埠號 用來標識本地通訊程序,方便os提交資料.就是說程序指定了對方程序的網路ip,但這個...

socket程式設計基礎

對於socket在這裡我不想究其歷史,我只想說其時它是一種程序通訊的方式,簡言之就是呼叫這個網路庫的一些api函式就能實現分布在不同主機的相關程序之間的資料交換.socket中首先我們要理解如下幾個定義概念 二是埠號 用來標識本地通訊程序,方便os提交資料.就是說程序指定了對方程序的網路ip,但這個...

Go基礎程式設計 Socket程式設計

socket起源於unix,而unix基本哲學之一就是 一切皆檔案 都可以用 開啟open 讀寫write read 關閉close 模式來操作。socket就是該模式的乙個實現,網路的socket資料傳輸是一種特殊的i o,socket也是一種檔案描述符。socket也具有乙個類似於開啟檔案的函式...