本文件主要講解了linux下socket程式設計的一些基本知識,主要包括套接字和位元組序的概念,以及一些常用的結構體和函式。
linux網路程式設計 linux網路程式設計|人工智慧物聯網
linux中的網路程式設計通過socket介面實現,socket既是一種特殊的io,提供對應的檔案描述符。乙個完整的socket都有乙個相關描述,簡稱五元組(協議、本地位址、本地埠、遠端位址、遠端埠),每乙個socket有乙個本地的唯一的socket,由作業系統分配。
位元組序分為大端位元組序和小端位元組序,網路協議使用網路位元組序即大端位元組序。
內部位元組表示順序和網路位元組順序不一樣的機器,要對資料進行轉換。
uint32_t htonl(uint32_t hostlong);
將乙個32位整數由主機位元組序轉換為網路位元組序
uint16_t htons(uint16_t hostshort);
將乙個16位整數由主機位元組序轉換成網路位元組序
uint32_t ntohl(uint32_t netlong);
將乙個32位整數由網路位元組序轉成主機位元組序
uint16_t ntohs(uint16_t netshort);
將乙個16位整數由網路位元組序轉換成主機位元組序
1 #include 2sa_family:一般來說ipv4使用af_inet。struct
sockaddr;
在傳遞給需要位址結構的函式時,把指向該結構的指標轉換成struct sockaddr *傳遞進去。
1通用位址結構和網際網路位址結構資料型別是等效的,可以相互轉換,通常使用sockaddr_in更為方便。struct
in_addr;45
struct
scokaddr_in;
1 #include 2返回:成功返回檔案描述符,出錯返回-1。int socket(int domain, int type, int protocal)
socket建立在核心中,若建立成功返回核心檔案描述表中的socket描述符。
引數:domain:af_inet ipv4網際網路域、af_inet6 ipv6網際網路域、af_unix unix域、af_unspec 未指定。
protocol:通常為0,表示按給定的域和套接字型別選擇預設協議
type:sock_stream 流式套接字,可以提供可靠的、面向連線的的通訊流,它使用tcp協議,tcp保證了資料傳輸的正確性和順序性。
sock_dgram 資料報套接字,定義了一種無連線的服務,資料通過相互獨立的報文進行傳輸,是無序的,並且不保證可靠、無差錯,使用資料報協議udp協議。sock_raw 原始套接字,允許對低層協議如ip或icmp直接訪問,主要用於新的網路協議實現的測試等。sock_seqpacket 長度固定的、有序、可靠的面向連線報文傳遞。
1 #include功能:將網路位元組序轉換位點分十進位制
1功能:將點分十進位制轉換為網路位元組序const
char* inet_ntop(int domain, const
void *restrict_addr, char *restrict_str, socklen_t size);
1引數:const
char* inet_pton(int domain, const
void *restrict str, char *restrict addr);
addr:internet位址,32位ipv4位址(網路位元組序)
str:位址字串(點分十進位制)指標
size:位址字串大小
1struct sockaddr_in sin; //
定義乙個sockaddr_in結構體
2char buf[16
];3 memset(&sin, 0, sizeof
(sin));
4 sin.sin_family = af_inet; //
填寫internet位址族
5 sin.sin_port = htons((short)3001); //
填寫埠號(網路位元組序)6//
填寫sin_addr
7if (inet_pton(af_inet, "
192.168.2.1
", &sin.sin_addr.s_addr) <=0)8
11 printf("
%s\n
", inet_ntop(af_inet, &sin.sin_addr.s_addr, buf, sizeof(buf)));
linux下socket程式設計
一 什麼是socket socket可以看成是使用者程序與核心網路協議棧的程式設計介面。socket不僅可以用於本機的程序間通訊,還可以用於網路上不同主機的程序間通訊。socket api是一層抽象的網路程式設計介面,適用於各種底層網路協議,如ipv4 ipv6。struct sockaddr in...
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...