linux系统编程-SOCKET通信基础编程(0)-常用数据结构

本文详细介绍Linux系统下SOCKET通信的数据结构、IP地址与端口的转换规则,以及常见网络地址结构体的使用方法,深入解析TCP客户端和服务端的创建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

linux系统编程-SOCKET通信基础编程(0)-常用数据结构

linux系统编程-SOCKET通信基础编程(1)-TCP客户端创建

linux系统编程-SOCKET通信基础编程(2)-TCP服务端创建

 

 

1.网络地址结构体

struct sockaddr {
	unsigned short sa_family;  /* address family, AF_xxx , 2 Byte*/
	char sa_data[14]; 	       /* 14 bytes of protocol address  14 Byte*/
	};
	
struct sockaddr_in {
    short  int  sin_family; 			/* Address family , 2 Byte*/
    unsigned short  int  sin_port; 	    /* Port number , 2Byte   服务器端口*/   
    struct in_addr  sin_addr; 		/* Internet address , 4 Byte   IP地址信息 */
	unsigned char  sin_zero[8];    	/* Same size as struct sockaddr , 8 Byte*/
};
	
struct in_addr {
    unsigned long s_addr;			//4 Byte
};

1.1使用简介

socklen_t addrlen=0;
int server_sock = setup_socket();
struct sockaddr_in  client_addr;
bzero(&client_addr, sizeof(client_addr));
addrlen = sizeof(client_addr);
client_sock = accept(server_sock, (struct sockaddr *)&client_addr, &addrlen);
    
(char *)inet_ntoa(client_addr.sin_addr.s_addr)//转换客户端IP地址为192.168.1.1这种字符串类型
ntohl(client_addr.sin_port)                  //获取端口号


    
/****************************************************************	
在编程中大多数是使用sockaddr_in这个结构来设置/获取地址信息。
sin_family指代协议族,在网络通信的socket编程中只能是AF_INET
sin_port存储端口号(使用网络字节顺序)
sin_addr存储IP地址,使用in_addr这个数据结构
*****************************************************************/


struct  sockaddr_in sa;
sa.sin_family = AF_INET;  // AF_INET   TCP协议标识网络通信   AF_UNIX  本地的unix通信,
sa.sin_port = htons(3490); 	/* short, NBO*/
sa.sin_addr.s_addr = inet_addr("132.241.5.10"); 
bzero(&(sa.sin_zero), 8);

2.IP地址转换

int inet_aton(const char *cp, struct in_addr *inp); //将cp所指的字符串IP地址转换成32位的网络字节序IP地址
in_addr_t inet_addr(const char *cp); //将cp所指的字符串IP地址转换成32位的网络字节序IP地址返回
char *inet_ntoa(struct in_addr in); //将32位网络字节序IP地址转换成点分十进制的字符串IP地址

3.端口号的使用规则

计算机端口号总数:65535,一般用到的是1~65535,0一般不使用
0-1023: 系统端口,也叫公认端口,这些端口只有系统特许的进程才能使用;
1024~65535 为用户端口:
1024-5000: 临时端口,一般的应用程序使用1024到4999来进行通讯;
5001-65535:服务器(非特权)端口,用来给用户自定义端口。

4.INADDR_ANY

INADDR_ANY就是inet_addr("0.0.0.0");
当服务器的监听地址是INADDR_ANY时含义是让服务器端计算机上的所有网卡的IP地址都可以作为服务器IP地址,也即监听外部客户端程序发送到服务器端所有网卡的网络请求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值