C ++套接字客户端/服务器简单消息发送者

时间:2015-02-07 17:07:55

标签: c++ sockets

我是套接字概念的新手,当我试图接受教程时,我无法执行此步骤

教程:

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.saddr: ip.sin.addr。这个人唯一的成员是s_un,我想做什么?

1 个答案:

答案 0 :(得分:1)

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,但它可能会在幕后解析为不同的数据成员。