套接字编程-connect()中参数的含义
我刚开始学习socket编程,在套接字编程-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
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()
三次?你的问题是什么?