Linux下socket程式設計基本知識

2022-06-28 11:24:14 字數 2519 閱讀 8384

本文件主要講解了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 2

struct

sockaddr;

sa_family:一般來說ipv4使用af_inet。

在傳遞給需要位址結構的函式時,把指向該結構的指標轉換成struct sockaddr *傳遞進去。

1

struct

in_addr;45

struct

scokaddr_in;

通用位址結構和網際網路位址結構資料型別是等效的,可以相互轉換,通常使用sockaddr_in更為方便。

1 #include 2

int socket(int domain, int type, int protocal)

返回:成功返回檔案描述符,出錯返回-1。

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:位址字串大小

1

struct 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...