Accept()函数;C语言中的简单tcp服务器

Accept()函数;C语言中的简单tcp服务器,c,sockets,tcp,C,Sockets,Tcp,我正在学习C语言中的socket编程&下载了一个简单的tcp服务器源文件。我了解这些函数中除第二个参数外的每一行: accept(socket_fd, (struct sockaddr *)&client, &length); bind(socket_fd, (struct sockaddr *)&server, length); accept+bind函数是“sys/types.h”和“sys/socket.h”中的典型函数,手册页将其描述为指向结构的指针,但我仍然

我正在学习C语言中的socket编程&下载了一个简单的tcp服务器源文件。我了解这些函数中除第二个参数外的每一行:

accept(socket_fd, (struct sockaddr *)&client, &length);

bind(socket_fd, (struct sockaddr *)&server, length);
accept+bind函数是“sys/types.h”和“sys/socket.h”中的典型函数,手册页将其描述为指向结构的指针,但我仍然无法理解这里到底发生了什么

有人能解释一下第二个参数是怎么回事吗?括号、指针和地址符号在同一个表达式中让我感到困惑


提前谢谢

符号
&
的基本意思是“获取值/对象的地址”。
(struct sockaddr*)
是一个强制转换。它告诉编译器,您希望将地址视为指向sockaddr结构的指针。因此,它告诉编译器,
client
可以被视为sockaddr结构,并将其地址传递给函数。对于
accept
函数,连接套接字的地址将存储在给定的结构中。

发生的情况是
accept
bind
函数需要
struct sockaddr
指针,您的
客户端
服务器
变量可能声明为
(struct sockaddr*)
。因此,为了避免在C中出现警告或在C++中出现编译器错误,您需要通过放置表达式来执行显式强制转换:

(struct sockaddr *)
在参数之前

您需要符号,因为
客户端
服务器
不是指针。它们可能被宣布为:

struct sockaddr_in client, server;

还值得一提的是,这些结构密切相关。请看这张照片。

非常感谢,这非常有帮助。结构也是这样声明的。如果我将它们声明为指针,那么会如何更改参数?@Jeremy:如果它们是指针(类型为sockaddr),您可以使用bind(fd、client和length),例如。我认为这对我来说更容易理解。。。非常感谢,你帮了我很大的忙。