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

 

 

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地址,也即监听外部客户端程序发送到服务器端所有网卡的网络请求。

猜你喜欢

转载自blog.csdn.net/yuupengsun/article/details/106323765