socket程式設計 socket基本概念

2021-07-04 10:21:20 字數 2290 閱讀 6807

socket

socket可以看成是使用者程序與核心網路協議棧的程式設計介面,不僅可以用於本機的程序間通訊,也可以用於網路上不同主機的程序間通訊—而管道只能在同一臺主機進行通訊

應用層依靠socket進行資料傳輸,我們不必關心底層的核心,即底層資料的傳輸細節,只關心套介面的存在。

可以把套介面看成程序間的通訊,主機a上的程序通過套介面傳輸資料到主機b的程序。

struct sockaddr_in;
說明:sin_len:整個sockaddr_in結構體的長度

sin_family:指定該位址家族,在這裡必須設為af_inet – ipv4

sin_port:埠

sin_addr:ipv4位址

sin_zero:暫不使用,一般將其設為0

其中,結構體in_addr:

struct in_addr ;
結構體in_addr用來表示乙個32位的ipv4位址–位元組序為網路位元組序

通用位址結構

通用位址結構用來指定與套接字關聯的位址

struct sockaddr;
可看到:通用位址結構中的da_data有14個位元組和ipv4 sin_port(2位元組)、sin_addr(4位元組)、sin_zero(8位元組)相同,說明這兩個相容,通常,進行tcp/ip程式設計時跟多的是填充ipv4套介面位址結構,然後強制轉換為通用位址結構。

位元組序

1、大端位元組序(big endian)

最高有效位儲存在最低記憶體位址處,最低有效位儲存在最高記憶體位址處

2、小端位元組序(little endian)

最高有效位儲存在最高記憶體位址處,最低有效位儲存在最低記憶體位址處

主機主機序

不同主機有不同的位元組序,如x86位小端位元組序,motorola 6900為大端位元組序,arm位元組序為可配置的

網路位元組序

網路位元組序規定為大端位元組序

為什麼要引入位元組序這個概念?

socket能夠實現異構系統間通訊,不同系統位元組序不同,引入位元組序可實現異構系統通訊

測試主機大小端:

int main()

高位址存高記憶體位址—小端位元組序

位元組序轉換函式

uint32_t htonl(uint32_t hostlong); //將4個位元組的主機位元組序轉換為網路位元組序

uint32_t htons(uint32_t hostshort);//2個位元組的主機位元組序轉換為網路位元組序

uint32_t ntohl(uint32_t netlong); //相反

uint32_t ntohs(uint32_t netshort);

說明:h代表host;n代表network

s代表short;l代表long

int main()

主機位元組序轉換為了網路位元組序(大端位元組序)

in_addr_t inet_addr (const char *cp);

inet_addr將乙個點分十進位制ip位址字串轉換成32位數字表示的ip位址(網路位元組順序)。

char* inet_ntoa (struct in_addr in);

inet_ntoa將乙個32位數字表示的ip位址轉換成點分十進位制ip位址字串。

這兩個函式互為反函式

unsigned char *ip = 「192.168.1.120」;

int int_ip = inet_addr(ip);

printf(「%d\n」, int_ip);

struct in_addr ipaddr ;

ipaddr.s_addr = int_ip;

printf("%s\n", inet_ntoa(ipaddr));

(1)流式套接字 sock_stream — tcp

提供面向連線、可靠的資料傳輸服務,資料按位元組流、按順序收發,保證在傳輸過程中無丟失、無冗餘。tcp協議支援該套接字。

(2)資料報套接字 sock_dgram – udp

提供面向無連線的服務,資料收發無序,不能保證資料的準確到達。udp協議支援該套接字。

(3)原始套接字 sock_raw

允許對低於傳輸層的協議或物理網路直接訪問,例如可以接收和傳送icmp報文。常用於檢測新的協議。

socket程式設計

一直以為serversocket accept之後客戶端才能發資訊,實驗後得出如下結論 1 serversocket沒有accept時,client是可以傳送資訊到server端的。2 serversocket accept之後,正在處理訊息時,client也是可以傳送資訊到server端。如果se...

Socket程式設計

對tcp ip udp socket程式設計這些詞你不會很陌生吧?隨著網路技術的發展,這些詞充斥著我們的耳朵。那麼我想問 1.什麼是tcp ip udp?2.socket在 呢?3.socket是什麼呢?4.你會使用它們嗎?什麼是tcp ip udp?tcp ip transmission cont...

socket程式設計

建立socket 建立乙個 socket,它可用於在基於 tcp ip 的網路 如 internet 上通訊。socket s new socket addressfamily.internetwork,sockettype.stream,protocoltype.tcp 若要使用 udp 而不是 ...