linux下socket程式設計

2021-07-05 16:07:00 字數 1484 閱讀 5223

一、什麼是socket

socket可以看成是使用者程序與核心網路協議棧的程式設計介面。

socket不僅可以用於本機的程序間通訊,還可以用於網路上不同主機的程序間通訊。

socket api是一層抽象的網路程式設計介面,適用於各種底層網路協議,如ipv4、ipv6。

struct sockaddr_in ;

/* internet address. */

struct in_addr ;

通用位址結構

struct sockaddr ;

在使用時要強制裝換

bind

(server_fd, (struct sockaddr *)

(&s_add), sizeof

(struct sockaddr))

二、網路位元組序

位元組序

大端位元組序:

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

小端位元組序:

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

主機位元組序:

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

網路位元組序:

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

為使網路程式具有可移植性,使同樣的c**在大端和小端計算機上編譯後都能正常執行,可以呼叫以下庫函式做網路位元組序和主機位元組序的轉換。

可以使用以下函式:

#include

uint32_t htonl(uint32_t hostlong);

uint16_t htons(uint16_t hostshort);

uint32_t ntohl(uint32_t netlong);

uint16_t ntohs(uint16_t netshort);

h表示host,n表示network。l表示long,s表示short。

三、位址轉換函式

sockaddr_in 結構體中的成員struct in_addr sin_addr表示32位的ip位址。但是我們通常用點分十進位制的字串表示ip位址,以下函式可以在字串表示和in_addr表示之間轉換。

in_addr_t inet_addr(const char *strptr);

tmp->cli_addr.sin_addr.s_addr   = inet_addr("127.0.0.1");
in_addr轉字串的函式:

char *inet_ntoa(struct in_addr inaddr);

linux下socket程式設計

作為乙個嵌入式開發者,在實際的研發專案中,常常需要編寫socket網路程式設計介面,提供給軟體開發人員。下面將提供乙個常用的 模板 客戶端的功能可以用微控制器多功能除錯助手進行驗證 include include include include include include include def...

linux下socket程式設計

簡單的linux下socket程式設計,分別基於tcp和udp協議實現的簡單程式 linux下socket程式設計可以概括為以下幾個函式的運用 流程 將套接字繫結到伺服器的網路位址上 if bind server sockfd,struct sockaddr my addr,sizeof struc...

Linux下Socket程式設計 二

亞嵌 連線建立 資料傳輸 send 和recv 這兩個函式用於面向連線的socket上進行資料傳輸。send 函式原型為 int send int sockfd,const void msg,int len,int flags sockfd是你想用來傳輸資料的socket描述符 msg是乙個指向要傳...