sockaddr_in是一个结构体,用于描述IPv4的地址信息,其定义如下:
struct sockaddr_in {
short int sin_family; // 地址族,一般为AF_INET
unsigned short int sin_port; // 端口号,网络字节序
struct in_addr sin_addr; // IP地址
unsigned char sin_zero[8]; // 用于填充,使sizeof(sockaddr_in)等于16
};
其中,in_addr结构体用于存储IP地址,其定义如下:
struct in_addr {
unsigned long s_addr; // IP地址,网络字节序
};
下面是一个示例代码,用于创建一个IPv4的TCP套接字,并绑定到本地IP地址和端口号:文章来源:https://www.toymoban.com/news/detail-616356.html
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0); // 创建TCP套接字
if (sockfd == -1) {
std::cerr << "socket error" << std::endl;
return -1;
}
sockaddr_in server_addr;
std::memset(&server_addr, 0, sizeof(server_addr)); // 清空结构体
server_addr.sin_family = AF_INET; // 地址族为IPv4
server_addr.sin_port = htons(12345); // 绑定端口号为12345,需要进行网络字节序转换
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 绑定本地IP地址为127.0.0.1,需要进行网络字节序转换
if (bind(sockfd, (sockaddr *)&server_addr, sizeof(server_addr)) == -1) { // 绑定套接字和地址信息
std::cerr << "bind error" << std::endl;
return -1;
}
// 其他操作...
close(sockfd); // 关闭套接字
return 0;
}
需要注意的是,IPv4地址需要进行网络字节序转换,可以使用inet_addr函数或inet_pton函数进行转换。端口号也需要进行网络字节序转换,可以使用htons函数或htons函数进行转换。
bind函数将一个socket与一个特定的IP地址和端口号进行绑定,使得该socket可以接受来自该地址和端口号的数据。这样,当其他socket向该地址和端口号发送数据时,该socket就可以接收并处理这些数据。在网络编程中,bind函数通常用于服务器端,用于绑定服务器的IP地址和端口号,以便客户端可以连接服务器。文章来源地址https://www.toymoban.com/news/detail-616356.html
到了这里,关于C++ 网络编程 sockaddr_in结构体的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!