![](/img/trans.png)
[英]Simple client/server using C++/boost socket works under Windows but fails under Linux
[英]C++ socket client / server simple message sender
我是套接字概念的新手,当我尝试遵循本教程时,无法遵循这一步骤
教程:
sockaddr_in ip;
ip.sin_family = AF_INET;
ip.sin_port = htons(99999);
ip.sin_addr.s_addr = inet_addr("10.0.0.2");
问题是当我输入ip.sin.addr时,我无法遵循ip.sin_addr.saddr。 这个成员唯一的成员是s_un,我应该怎么做?
ip.sin_addr
是in_addr
结构。 根据您要编码的平台, in_addr
有不同的成员可用。 例如,在Linux上,它只有一个成员:
struct in_addr {
uint32_t s_addr;
};
在Windows上,它具有三个成员的union
:
struct in_addr {
union {
struct{
unsigned char s_b1,
s_b2,
s_b3,
s_b4;
} S_un_b;
struct {
unsigned short s_w1,
s_w2;
} S_un_w;
unsigned long S_addr;
} S_un;
};
然后,预编译器#define
宏将s_addr
映射到S_un.S_addr
。
因此,您可以始终在所有平台上的代码中使用ip.sin_addr.s_addr
,但是它可能会解析为幕后的其他数据成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.