IP是为收发网络数据而分配给计算机的值。
端口号是为区分程序中创建的套接字而分配给套接字的序号。
服务器端常见套接字初始化过程:
int serv_sock;
struct sockaddr_in serv_addr;
char *serv_port = "9190";
//创建服务器端套接字(监听套接字)
serv_sock = socket(PF_INET,SOCK_STREAM,0);
//地址信息初始化
memset(&serv_addr,0,sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(atoi(serv_port));
//分配地址信息
bind(serv_sock,(struct sockaddr *)&serv_addr, sizeof(serv_addr));
表示IPv4地址的结构体
struct sockaddr_in
{
sa_family_t sin_family; //地址族
uint16_t sin_port; //端口号
struct in_addr sin_addr; //IP地址
char sin_sero[8]; //不使用
}
struct in_addr
{
In_addr_t s_addr; //4字节IPv4地址
}
struct sockaddr
{
sa_family_t sin_family;//地址族
char sa_data[14];//地址信息(IP地址和端口号)
}
知识点:
1.在给sockaddr_in结构体变量赋值时,要经过主机字节序转换为网络字节序的过程。2.数据在收发过程中有自动转换机制,不需手动转换。即除了向sockaddr_in结构体变量填充数据外,其他情况无需考虑字节序问题。
3.利用INADDR_ANY可自动获取运行服务器端的计算机的IP地址。