struct“sockaddr_in servaddr,clientaddr;”是什么意思?

时间:2017-03-07 06:47:53

标签: c sockets

struct sockaddr_in servaddr, cliaddr;
我是插座编程的新手。
c中套接字编程中的这个陈述是什么意思?
我们是否正在创建名为sockaddr_in的结构,并且是servaddrcliaddr成员?为什么没有提到他们的数据类型?

2 个答案:

答案 0 :(得分:3)

  

c语言中套接字编程中的这个语句是什么意思?

它声明了两个未初始化的struct sockaddr_in类型的变量。

  

我们是否正在创建名为sockaddr_in的结构?

没有。必须已经定义它来声明变量,或者你的程序是不正确的。

  

并且是servaddrcliaddr成员吗?

不。

  

为什么没有提到他们的数据类型?

是的。请参阅第一个问题的答案。

答案 1 :(得分:1)

在Unix套接字中,标题netinet/in.h定义了struct类型sockaddr_in,如下所示:

struct sockaddr_in {
    short            sin_family;   // e.g. AF_INET, AF_INET6
    unsigned short   sin_port;     // e.g. htons(3490)
    struct in_addr   sin_addr;     // see struct in_addr, below
    char             sin_zero[8];  // zero this if you want to
};

struct in_addr {
    unsigned long s_addr;          // load with inet_pton()
};

(参考:http://beej.us/guide/bgnet/output/html/multipage/sockaddr_inman.html

您的servaddrcliaddr是sockaddr_in -type结构的名称。他们两个(在Unix中,至少)有四个成员(short sin_family等)。 (其中一个成员struct类型in_addr名为sin_addr,后面定义了几行,后面有一个成员unsigned long s_addr。有一个结构只有一个成员的原因,你也可以在stackoverflow中找到解释。)

如果你想使用sockaddr_in,你必须#include <netinet/in.h>或Windows等效netinet/in.h(除非你自己定义结构)。