一、什麼是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是乙個指向要傳...