struct sockaddr_in servaddr, cliaddr;
我是插座编程的新手。
c中套接字编程中的这个陈述是什么意思?
我们是否正在创建名为sockaddr_in
的结构,并且是servaddr
和cliaddr
成员?为什么没有提到他们的数据类型?
答案 0 :(得分:3)
c语言中套接字编程中的这个语句是什么意思?
它声明了两个未初始化的struct sockaddr_in
类型的变量。
我们是否正在创建名为
sockaddr_in
的结构?
没有。必须已经定义它来声明变量,或者你的程序是不正确的。
并且是
servaddr
和cliaddr
成员吗?
不。
为什么没有提到他们的数据类型?
是的。请参阅第一个问题的答案。
答案 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)
您的servaddr
和cliaddr
是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
(除非你自己定义结构)。