根据 https://stackoverflow.com/a/5328190 ,我可以使用
std::string ip ="192.168.1.54";
std::stringstream s(ip);
int a,b,c,d; //to store the 4 ints
char ch; //to temporarily store the '.'
s >> a >> ch >> b >> ch >> c >> ch >> d;
std::cout << a << " " << b << " " << c << " "<< d;
将 IP 转换为其 4 个字节。 Buw 我怎么把它们放在一个struct sockaddr
{
__SOCKADDR_COMMON (sa_); /* Common data: address family and length. */
char sa_data[14]; /* Address data. */
};
?我应该简单地复制
sa_data
的前 4 个字节中的 4 个字节吗? 最佳答案
您实际上并没有直接使用 struct sockaddr
。您可以填充一个 struct sockaddr_in
来保存 IPv4 地址和端口,然后将该结构的地址传递给需要 struct sockaddr *
的函数。
要从 C 字符串填充 sockaddr_in
的地址字段,您可以使用 inet_addr
。
例如:
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr(ip.c_str());
sin.sin_port = 0;
调用 recvfrom
时, addrlen
参数应该是一个指向变量的指针,该变量设置为 src_addr
参数指向的结构的大小。例如:struct sockaddr_in peerAddr;
socklen_t len = sizeof(peerAddr);
recvfrom(sock, data, capacity, 0, (struct sockaddr *)&peerAddr, &len);
关于c++ - 如何将 4 个字节复制到 sockaddr.sa_data?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63200170/