套接字编程-connect()中参数的含义

套接字编程-connect()中参数的含义,c,sockets,C,Sockets,我刚开始学习socket编程,在connect()函数中发现了这个不寻常的参数 (struct sockaddr *)&server socket()函数的代码段: if (connect(s , (struct sockaddr *)&server , sizeof(server)) < 0) { puts("connect error"); return 1; } if(connect(s,(struct sockaddr*)&server,siz

我刚开始学习socket编程,在
connect()
函数中发现了这个不寻常的参数

(struct sockaddr *)&server 
socket()函数的代码段:

if (connect(s , (struct sockaddr *)&server , sizeof(server)) < 0)
{
    puts("connect error");
    return 1;
}
if(connect(s,(struct sockaddr*)&server,sizeof(server))<0
{
puts(“连接错误”);
返回1;
}

服务器是您要连接的主机的协议地址。如果是IPv4套接字,您应该在*中使用
struct sockaddr\u转换成
struct sockaddr*
,如果是IPv6套接字,您应该在6*
中使用
struct sockaddr\u转换成
struct sockaddr*

服务器
是您连接到的主机的协议地址。如果它是IPv4套接字,你应该在*
中使用
struct sockaddr\u转换成
struct sockaddr*
,如果它是IPv6套接字,你应该在6*
中使用
struct sockaddr\u转换成
struct sockaddr*

sockaddr
结构用于存储互联网协议(IP)参与Windows套接字通信的计算机的地址。客户端使用
connect()
函数与服务器连接。因此,第二个参数基本上是由服务器IP和端口信息填充的,因此客户端可以连接到由IP和端口标识的服务器。
sockaddr
结构用于存储参与Windows套接字通信的机器的Internet协议(IP)地址。客户端使用
connect()
函数与服务器连接。因此,第二个参数基本上是用服务器IP和端口信息填充的,这样,如果您对指向服务器的指针感到困惑,那么客户端可以连接到由IP和端口标识的服务器,我假设
中的
sockaddr\u类型未传递给函数,而是转换为指向
struct sockaddr
的指针,下面是您的答案:

中的
struct sockaddr\u只是
struct sockaddr
的包装结构:

struct sockaddr {
    unsigned short sa_family;
    char           sa_data[14];
};
端口号和ip地址保存在这里。它们在
sa_data[14]
中保存在一起-第一个
2字节
保存端口号,下一个
4字节
保存ip地址。剩余的
8字节
未使用。这些是
8字节
当您在
中使用
sockaddr\u时,可通过
sin\u zero[8]
清除为零


connect()
这样的函数在
中不知道任何类型的
struct sockaddr\u,它们只知道
struct sockaddr

,如果您对指向
服务器的指针的原因感到困惑,我假设
中的
sockaddr\u类型未传递给函数,而是转换为指向
struct sockaddr
的指针,下面是您的答案:

中的
struct sockaddr\u只是
struct sockaddr
的包装结构:

struct sockaddr {
    unsigned short sa_family;
    char           sa_data[14];
};
端口号和ip地址保存在这里。它们在
sa_data[14]
中保存在一起-第一个
2字节
保存端口号,下一个
4字节
保存ip地址。剩余的
8字节
未使用。这些是
8字节
当您在
中使用
sockaddr\u时,可通过
sin\u zero[8]
清除为零


connect()
这样的函数不知道
中的任何类型的
struct sockaddr\u,它们只知道
struct sockaddr

不,我只是对语法和类型转换等感到困惑。。。请帮助我…好吧,它希望您给出一个指针,因此
&server
而不是
server
。由于它用于具有不同结构的所有协议,因此您可以将它强制转换为所有协议的公共结构
struct sockaddr*
。因此
(struct sockaddr*)&server
。也许这会有所帮助:不,我只是对语法和强制转换之类的东西感到困惑。。。请帮助我…好吧,它希望您给出一个指针,因此
&server
而不是
server
。由于它用于具有不同结构的所有协议,因此您可以将它强制转换为所有协议的公共结构
struct sockaddr*
。因此
(struct sockaddr*)&server
。也许这会有所帮助:不,我只是对语法和强制转换之类的东西感到困惑。。。请帮我解决这个问题不,我只是对语法和施法等感到困惑。。。请帮我解释一下,当你的问题是关于
connect()
时,为什么你提到
socket()
三次?你的问题是什么?当你的问题是关于
connect()
时,为什么你提到
socket()
三次?你的问题是什么?