gpt4 book ai didi

c - 无法识别存储在 sockaddr_in 结构中的类型

转载 作者:太空宇宙 更新时间:2023-11-04 07:23:09 26 4
gpt4 key购买 nike

我在 C 编程方面相对较新,尤其是在套接字编程方面,但我花了很多时间试图帮助自己解决这个问题,但没有找到任何东西,我希望有人能够提供帮助。所以这就是问题所在(我只写了我有问题的那一行)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/time.h>
#include <errno.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
typedef int SOCKET;

static const int SOCKET_ERROR = -1;

/*Variables initialisation*/
int32_t filtersize1=0;
int32_t filtersize2=0;
SOCKET sock;
unsigned int bytes_sent = 0;
int success = TRUE;
int erreur2=0;
int erreur3=0;


static char const *DEF_HOST_IP = "132.166.142.227"/* default target host address*/
static const unsigned short DEF_HOST_PORT = 15000; /* default target port */
struct sockaddr_in hostinfo;

/* Store TCP/IP parameters */
hostinfo.sin_family = AF_INET;
hostinfo.sin_addr.s_addr = inet_addr( *DEF_HOST_IP);
hostinfo.sin_port = htons( DEF_HOST_PORT);

当我编译时出现错误“'.'之前需要构造函数、析构函数或类型转换” token”,以及我填充 sockadrr_in 结构(名为 hostinfo)的那一行已经在另一台机器上使用过这段代码并且它正在运行。我准确地说,我之前已经尝试过将结构设置为零,但我遇到了同样的问题。如果有人有解决方案,这真的对我有帮助,因为我不知道该尝试什么了。提前致谢。

最佳答案

您可以按以下方式初始化结构:

// compiles
struct sockaddr_in hostinfo = {
.sin_family = AF_INET
};

但是一旦你添加了一个函数调用,它就不再起作用了,因为元素不再是常数。对于编译器来说,添加这个函数调用意味着该元素不是常量,因此它不知道为全局对象存储什么。

// does not compile
struct sockaddr_in hostinfo = {
.sin_family = AF_INET,
.sin_port = htons(DEF_HOST_PORT),
};

此外,您在该行中缺少分号:

static char const *DEF_HOST_IP = "132.166.142.227"

脱离@klas-lindback 所说的,您应该将 hostinfo 初始化为某处函数的一部分。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/time.h>
#include <errno.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>

static char const *DEF_HOST_IP = "132.166.142.227"; /* default target host address*/
static const unsigned short DEF_HOST_PORT = 15000; /* default target port */
struct sockaddr_in hostinfo;

void setup_hostinfo()
{
/* Store TCP/IP parameters */
hostinfo.sin_family = AF_INET;
hostinfo.sin_addr.s_addr = inet_addr(DEF_HOST_IP);
hostinfo.sin_port = htons(DEF_HOST_PORT);
}

int main(void) {

/* setup our hostinfo */
setup_hostinfo();

return 0;
}

关于c - 无法识别存储在 sockaddr_in 结构中的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20148185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com