无法识别结构中存储在sockadrr_中的类型

无法识别结构中存储在sockadrr_中的类型,c,sockets,types,C,Sockets,Types,我对C编程比较陌生,尤其是在socket编程方面,但我花了很多时间试图在这个问题上帮助自己,但没有发现任何东西,我希望有人能够帮助我。这就是问题所在(我只在有问题的地方写一行) #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 输入插座; 静态常量int套接字错误=-1; /*变量初始化*/ int32_t filtersize1=0; int32_t filtersize2=0; 插座; 已发送的无符号整数字节=0; int success=TRUE; i

我对C编程比较陌生,尤其是在socket编程方面,但我花了很多时间试图在这个问题上帮助自己,但没有发现任何东西,我希望有人能够帮助我。这就是问题所在(我只在有问题的地方写一行)

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
输入插座;
静态常量int套接字错误=-1;
/*变量初始化*/
int32_t filtersize1=0;
int32_t filtersize2=0;
插座;
已发送的无符号整数字节=0;
int success=TRUE;
int erreur2=0;
int erreur3=0;
静态字符常量*DEF_HOST_IP=“132.166.142.227”/*默认目标主机地址*/
静态常量无符号短定义主机端口=15000;/*默认目标端口*/
hostinfo中的结构sockaddr_;
/*存储TCP/IP参数*/
hostinfo.sin_family=AF_INET;
hostinfo.sin_addr.s_addr=inet_addr(*DEF_HOST_IP);
hostinfo.sin_port=htons(DEF_主机_port);

当我编译时,我得到一个错误“expected constructor,destructor,or type conversion before.”“token”,在我填充sockadrr_in结构(名为hostinfo)的那一行,我猜测代码不会将sockadrr_in识别为结构类型,或者不会识别存储在此结构中的类型,但我已经在另一台机器上使用了这段代码,它正在工作。我之前已经尝试过将结构设置为零,我也有同样的问题。如果有人有一个解决方案,这将真的帮助我,因为我不知道该尝试什么了。提前感谢。

函数体之外只允许声明

台词:

/* 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);

不是声明,必须放在函数内部。

只允许在函数体外部声明

台词:

/* 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);

不是声明,必须放在函数内部。

只允许在函数体外部声明

台词:

/* 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);

不是声明,必须放在函数内部。

只允许在函数体外部声明

台词:

/* 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);

不是声明,必须放在函数中。

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

// 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;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
静态字符常量*DEF_HOST_IP=“132.166.142.227”/*默认目标主机地址*/
静态常量无符号短定义主机端口=15000;/*默认目标端口*/
hostinfo中的结构sockaddr_;
无效设置\u主机信息()
{
/*存储TCP/IP参数*/
hostinfo.sin_family=AF_INET;
hostinfo.sin_addr.s_addr=inet_addr(定义主机IP);
hostinfo.sin_port=htons(DEF_主机_port);
}
内部主(空){
/*设置我们的主机信息*/
设置主机信息();
返回0;
}

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

// 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;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
静态字符常量*DEF_HOST_IP=“132.166.142.227”/*默认目标主机地址*/
静态常量无符号短定义主机端口=15000;/*默认目标端口*/
hostinfo中的结构sockaddr_;
无效设置\u主机信息()
{
/*存储TCP/IP参数*/
hostinfo.sin_family=AF_INET;
hostinfo.sin_addr.s_addr=inet_addr(定义主机IP);
hostinfo.sin_port=htons(DEF_主机_port);
}
内部主(空){
/*设置我们的主机信息*/
设置主机信息();
返回0;
}

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

// 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;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
静态字符常量*DEF_HOST_IP=“132.166.142.227”/*默认目标主机地址*/
静态常量无符号短定义主机端口=15000;/*默认目标端口*/
hostinfo中的结构sockaddr_;
无效设置\u主机信息()
{
/*存储TCP/IP参数*/
hostinfo.sin_family=AF_INET;
hostinfo.sin_addr.s_addr=inet_addr(定义主机IP);
hostinfo.sin_port=htons(DEF_主机_port);
}
内部主(空){
/*设置我们的主机信息*/
设置主机信息();
返回0;
}

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

// 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
,作为