C語言 socket程式設計 1 理論基礎

2021-10-05 06:01:11 字數 2424 閱讀 2386

struct sockaddr_in
//通用位址結構,用來指定與socket關聯的位址

struct sockaddr
因為socket是支援異構通訊的,所以需要規定位元組序,因為不同的硬體,其位元組序不一致。

位元組序分為:

#include int main(void)

#include uint32_t htonl (uint32_t hostlong);

uint16_t htons (uint16_t hostshort);

uint32_t ntohl (uint32_t hostlong);

uint16_t ntohs (uint16_t hostshort);

其中,h代表host, n代表network; s代表short, l代表long

如 htonl -> 代表將4位元組整數由主機位元組序(大端或小端)轉換成網路位元組序(大端)

ntohl 則反之

由於使用者對ip位址習慣了「點分十進位制」的位址,如"192.168.0.100",但是程式並不是讀這個位址,而是32位的位址,

因此需要用位址轉換函式來方便使用者程式設計

#include #include int inet_aton (const char *cp, struct in_addr *inp);//這個函式就也是將」點分十進位制「位址轉換成32位位址,

//只不過是轉換成乙個位址結構,而不是返回乙個整形位址

in_addr_t inet_addr (const char *cp) //這個函式就是將」點分十進位制「位址轉換成32位位址

char *inet_ntoa (struct in_addr in); //將位址結構轉換成」點分十進位制「位址

舉例:

int main(void)

sock_stream: tcp

sock_dgram: udp

主動套接字:呼叫connect()函式發起連線

被動套接字:呼叫accept()函式接受連線

#include int socket(int domain, int type, int protocol); //功能:建立乙個套接字用於通訊,

//相當於安裝了一部**機

功能:建立乙個socket套接字

//domain: 指定通訊協議族,af_inet,pf_inet 這兩者是一樣的

//type: sock_dgram, sock_stream

//protocol:協議型別,習慣填0,或者顯式指定協議型別ipproto_tcp

//返回值:成功返回非負整數,失敗返回-1

int bind (int sockfd, const struct sockaddr *addr, socklen_t addrlen);
功能:繫結乙個本地位址到套接字

//sockfd: socket函式返回的套接字

//addr: 要繫結的位址

//addrlen: 位址長度

//返回值:成功返回0,失敗返回-1

int listen(int sockfd, int backlog)
功能:將套接字用於監聽進入的連線,將套接字由close轉換成listen狀態,轉換成監聽狀態之後才能連線

//sockfd: socket函式返回的套接字

//backlog:規定核心為此套接字排隊的最大連線個數,能夠併發連線的數目,其值等於 已完成連線佇列數+未完成佇列數(三次握手未成功) 之和

//返回值:成功返回0,失敗返回-1

int accpet(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:從已完成連線佇列中返回第乙個連線,如果已完成連線隊列為空(說明沒有三次握手成功的套接字),則阻塞

//sockfd: 伺服器套接字

//addr: 將返回對等方的套接字位址

//addrlen: 返回對等方的套接字位址長度

//返回值:成功返回非負整數,失敗返回-1

//相當於將對方來電號碼填充進來,accpet函式會返回乙個已連線套接字

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
功能:建立乙個連線至addr所指定的套接字

//sockfd: 未連線套接字

//addr: 要連線的套接字位址

//addrlen: 第二個引數addr長度

//返回值:成功返回0,失敗返回-1

C 的Socket程式設計(1)

開始學tcp ip才發現以前c和c 學的有多膚淺 接下來就準備返璞歸真啦 哈哈 轉戰c ing.1.了解基本socket函式 socket s socket family,type,protocal int nret connect s,sockaddr sin,sizeof s sockaddr ...

網路程式設計socket理論一

socket是應用層與tcp ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket 其實就是乙個門面模式,它把複雜的 tcp ip 協議族隱藏在 socket 介面後面,對使用者來說,一組簡單的介面就是全部,讓 socket 去組織資料,以符合指定的協議。乙個生活中的場景。你要打...

C語言 socket 通訊程式設計

server端在tcp的通訊中,需要做到以下6點 socket套接字的構造 socket int socket int domain,int type,int protocol domain 指定通訊域 選擇通訊的協議族。type 型別,tcp為sock stream,udp為sock dgram。...