linux网络编程socket,Linux网络编程入门
socket又叫做套接字,網絡編程又叫做套接字編程。而socket地址也稱為套接字地址,可以理解為計算機的網絡地址。
1.理解socket地址
假設小明同學想給女神打電話需要知道對方的電話號碼才能繼續溝通,而我們進行網絡通信也需要知道對方的socket地址。
電話號碼以北京地區為例,如010-82512345,有兩部分組成,3位區號,8位號碼,3-8組合。區號用于標示這在北京,號碼用于標示北京具體哪個電話機。
而在網絡通信中,采用類似方法標示socket地址。
socket地址最關鍵的兩部分為:(ip,port),即IP地址和port端口號,比如一個網絡地址為192.168.130.55:8000,
該ip地址用于區分計算機,而端口號8000用于區分不同的套接字。
2.通用socket地址
socket地址用一個結構體標示,sockaddr頭文件以及結構如下:
#include
struct sockaddr
{
sa_family_t sa_family;/*地址族類型,本教程使用AF_INET,代表TCP/IPv4協議族/
char sa_data[14]; /*14字節,存放socket地址值,ip地址和端口號*/
};
sockaddr是通用socket地址,但一般不直接用這個結構體,因為用的會蛋疼,14字節地址還得自己填充,自己填充ip地址和端口號會很麻煩,一般使用sockaddr_in結構體。但是很多網絡編程API的參數是通用地址結構struct sockaddr,使用這些API的時候將sockaddr_in進行類型強制轉換為sockaddr即可。
3.專用socket地址
sockaddr_in頭文件以及結構如下:
#include
struct sockaddr_in
{
sa_family_t int sin_family; /* 地址族,同sockaddr */
unsigned short int sin_port; /* 2字節端口號,網絡字節序表示 */
struct in_addr sin_addr; /* 4字節IP地址,見下,網絡字節序表示 */
unsigned char sin_zero[8]; /* 8字節,未使用 */
};
struct in_addr
{
u_int32_t s_addr; /* 4字節即32位IPv4地址,網絡字節序表示 */
}
如上所示,最大的變化是將14字節拆分 為2字節(端口號)+ 4字節(ip地址)+ 8字節(空閑未使用,保證sockaddr_in和sockaddr內存對齊),這樣進行拆分后,極大的方便了用戶的使用。
總結
以上是生活随笔為你收集整理的linux网络编程socket,Linux网络编程入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32H743+CubeMX-ADC
- 下一篇: STM32F407+CubeMX-使用T