Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 未定义对'的引用;插座';在VxWorks平台上_C_Vxworks - Fatal编程技术网

C 未定义对'的引用;插座';在VxWorks平台上

C 未定义对'的引用;插座';在VxWorks平台上,c,vxworks,C,Vxworks,我正在使用Vxworks 653平台,我已经创建了一个应用程序分区。我想在应用程序分区上创建一个服务器,在构建它之后,我会收到错误 未定义对“套接字”的引用,未定义对“绑定”的引用 如果是链接器错误或我丢失了什么,我该怎么办 守则: # include "vxWorks.h" # include "sockLib.h" # include "sys/socket.h" # include "netinet/in.h

我正在使用Vxworks 653平台,我已经创建了一个应用程序分区。我想在应用程序分区上创建一个服务器,在构建它之后,我会收到错误

未定义对“套接字”的引用,未定义对“绑定”的引用

如果是链接器错误或我丢失了什么,我该怎么办

守则:

        # include "vxWorks.h"   
        # include "sockLib.h"   
        # include "sys/socket.h"   
        # include "netinet/in.h"   
        # include "inetLib.h"   
        # include "ioLib.h"   
        # include "string.h"   
        # include "stdio.h"   
        # include "taskLib.h"   

        /* typedefs */

        typedef int SOCK_FD;/*  

        /* forward declarations */

        LOCAL void error(char* str);

        /******************************************************************************  
        *  
        * vxServer - processes UDP client requests  
        *  
        * This routine sits in an infinite loop handling client requests.  
        * When a request is received, the client's data is converted  
        * to the local byte-ordering and then displayed.  Next,  
        * a reply is sent to the client.  Then the server will process  
        * the next request or block if there is none.  
        */

        void vxServer(u_short port)
        {
            int clientAddrLength;
            SOCK_FD sockFd;
            struct sockaddr_in clientAddr;   
            struct sockaddr_in srvAddr;   
            char inetAddr[INET_ADDR_LEN];
        u_short clientPort;
        char* reply = "Here is your reply\n";
        int val;

        clientAddrLength = sizeof (clientAddr);   

            /* Create a socket */   
            if ((sockFd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)   
                error("Socket failed");

        /*   
         * Bind to a well known address. INADDR_ANY says  
         * any network interface will do. htonX()  
         * routines put things in network byte order.  
         */

        bzero((char*)&srvAddr, sizeof(srvAddr));
        srvAddr.sin_family = AF_INET;   
            srvAddr.sin_port = htons(port);
        srvAddr.sin_addr.s_addr = INADDR_ANY;   

            if (bind (sockFd, (struct sockaddr *) &srvAddr, sizeof(srvAddr)) < 0)   
                {   
                close(sockFd);
        error("Bind failed");   
                }   

            FOREVER   
                {   
                if (recvfrom (sockFd, (char*) &val, sizeof(val), 0,   
                         (struct sockaddr *) &clientAddr,   
                         &clientAddrLength) < 0)   
                    {   
                    close(sockFd);
        error("recvfrom failed");   
                    }   

                val = ntohl(val);
        inet_ntoa_b(clientAddr.sin_addr, inetAddr);
        clientPort = ntohl(clientAddr.sin_port);

        printf("Message received from client "    
                             "(port = %d, inet = %s):\n",
                     clientPort, inetAddr);
        printf("%d\n", val);   

                if (sendto (sockFd, reply, strlen(reply) + 1,   
                             0,(struct sockaddr *) &clientAddr,   
                             clientAddrLength) < 0)   
                    {   
                    close(sockFd);
        error("sendto failed");   
                    }   
                }   
            }   


        void error(char* str)
        {
            perror(str);
            exit(1);
        }
#包括“vxWorks.h”
#包括“sockLib.h”
#包括“sys/socket.h”
#包括“netinet/in.h”
#包括“inetLib.h”
#包括“ioLib.h”
#包括“string.h”
#包括“stdio.h”
#包括“taskLib.h”
/*typedefs*/
typedef int SOCK_FD;/*
/*转发声明*/
局部无效错误(字符*str);
/******************************************************************************  
*  
*vxServer-处理UDP客户端请求
*  
*此例程位于处理客户端请求的无限循环中。
*当收到请求时,将转换客户端的数据
*到本地字节顺序,然后显示。下一个
*将向客户端发送回复。然后服务器将处理
*下一个请求或块(如果没有)。
*/
无效vxServer(u_短端口)
{
int clientaddress长度;
SOCK_FD sockFd;
clientAddr中的结构sockaddr_;
srvAddr中的结构sockaddr_;
char inetAddr[INET_ADDR_LEN];
u_短客户端端口;
char*reply=“这是您的答复\n”;
int-val;
clientaddlength=sizeof(clientAddr);
/*创建套接字*/
如果((sockFd=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP))<0)
错误(“套接字失败”);
/*   
*绑定到一个众所周知的地址。INADDR_ANY说
*任何网络接口都可以。htonX()
*例程将事物按网络字节顺序排列。
*/
bzero((char*)&srvAddr,sizeof(srvAddr));
srvAddr.sin_family=AF_INET;
srvAddr.sinu端口=htons(端口);
srvAddr.sin\u addr.s\u addr=INADDR\u ANY;
if(bind(sockFd,(struct sockaddr*)&srvAddr,sizeof(srvAddr))<0
{   
关闭(sockFd);
错误(“绑定失败”);
}   
永远
{   
if(recvfrom(sockFd,(char*)&val,sizeof(val),0,
(结构sockaddr*)和客户端地址,
&clientAddressLength)<0)
{   
关闭(sockFd);
错误(“recvfrom失败”);
}   
val=ntohl(val);
inet_ntoa_b(clientAddr.sin_addr,inetAddr);
clientPort=ntohl(clientAddr.sinu端口);
printf(“从客户端收到的消息”
“(端口=%d,inet=%s):\n”,
客户端端口,inetAddr);
printf(“%d\n”,val);
如果(发送到)(sockFd,回复,strlen(回复)+1,
0,(结构sockaddr*)和clientAddr,
clientAddressLength)<0)
{   
关闭(sockFd);
错误(“发送失败”);
}   
}   
}   
无效错误(字符*str)
{
perror(str);
出口(1);
}

现在我对VxWorks Helix比旧的VxWorks 653更为熟悉,但是您是否检查了INCLUDE_SOCKLIB组件是否已添加到您的项目中,或者套接字层是否已添加到您的VSB中


通常,当出现链接器错误(如您描述的错误)时,项目中缺少组件和/或VSB中缺少层。

您使用Berkeley套接字函数。可能您必须添加相应的库。如何做到这一点取决于框架。不幸的是,我不能为VxWorks提供建议您还可以确定问题的标题。它不是
Socket
函数,而是
Socket
。语言
C
区分大小写。