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也具有乙個類似於開啟檔案的函式...