struct sockaddr_in servaddr, cliaddr;
我是套接字编程的新手。
在c中套接字编程中的这句话是什么意思?
我们要创建一个名为sockaddr_in的结构吗?servaddr和cliaddr是成员吗?为什么没有提到它们的数据类型?
发布于 2017-03-07 14:53:16
在c中套接字编程中的这句话是什么意思?
它声明了两个struct sockaddr_in类型的未初始化变量。
我们要创建一个名为
sockaddr_in的结构吗?
不是的。必须已经定义了它才能声明变量,否则您的程序格式不正确。
以及
servaddr和cliaddr是成员吗?
不是的。
为什么没有提到他们的数据类型?
它是。查看第一个问题的答案。
发布于 2017-06-02 16:24:25
在Unix套接字中,header 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等)。(其中一个成员是名为sin_addr的struct类型in_addr,它是在两行之后定义的,具有一个成员unsigned long s_addr。只有一个成员的结构是有原因的,你也可以在stackoverflow中找到解释。)
如果你想使用sockaddr_in,你必须对netinet/in.h使用#include <netinet/in.h>或Windows等效物(除非你自己定义结构)。
https://stackoverflow.com/questions/42641936
复制相似问题