⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udpserver.c

📁 这是VxWorks下的Socket UDP通信的源码
💻 C
字号:
/* udpServer.c - UDP server Demo */ 
 
/* 
DESCRIPTION 
This file contains the server-side of the vxWorks UDP example code. 
The example code demonstrates the usage of several BSD 4.4-style 
socket routine calls. 
*/ 

/* Author - LiuCY */

/* includes */ 
#include "vxWorks.h" 
#include "sockLib.h" 
#include "inetLib.h" 
#include "stdioLib.h" 
#include "strLib.h" 
#include "ioLib.h" 
#include "fioLib.h" 
#include "udpHeader.h" 
 
 
/********************************************************************* 
* 
* udpServer - read from UDP socket and display client's message if requested  
* 
* Example of vxWorks UDP server: 
*       -> sp udpServer 
*       task spawned: id = 0x3a1f6c, name = t2 
*       value = 3809132 = 0x3a1f6c 
*       -> MESSAGE FROM CLIENT (Internet Address 150.12.0.11, port 1028): 
*       Greetings from UDP client 
* 
* RETURNS: Never, or ERROR if a resources could not be allocated. 
*/ 
 
STATUS udpServer (void) 
    { 
    struct sockaddr_in  serverAddr;    /* server's socket address */ 
    struct sockaddr_in  clientAddr;    /* client's socket address */ 
    struct request      clientRequest; /* request/Message from client */ 
    int                 sockAddrSize;  /* size of socket address structure */ 
    int                 sFd;           /* socket file descriptor */ 
    char                inetAddr[INET_ADDR_LEN]; 
                                       /* buffer for client's inet addr */ 
 
    /* set up the local address */ 
 
    sockAddrSize = sizeof (struct sockaddr_in); 
    bzero ((char *) &serverAddr, sockAddrSize); 
    serverAddr.sin_len = (u_char) sockAddrSize; 
    serverAddr.sin_family = AF_INET; 
    serverAddr.sin_port = htons (SERVER_PORT_NUM); 
    serverAddr.sin_addr.s_addr = htonl (INADDR_ANY); 
 
    /* create a UDP-based socket */ 
 
    if ((sFd = socket (AF_INET, SOCK_DGRAM, 0)) == ERROR) 
        { 
        perror ("socket"); 
        return (ERROR); 
        } 
 
    /* bind socket to local address */ 
 
    if (bind (sFd, (struct sockaddr *) &serverAddr, sockAddrSize) == ERROR) 
        { 
        perror ("bind"); 
        close (sFd); 
        return (ERROR); 
        } 
 
    /* read data from a socket and satisfy requests */ 
 
    FOREVER 
        { 
        if (recvfrom (sFd, (char *) &clientRequest, sizeof (clientRequest), 0, 
            (struct sockaddr *) &clientAddr, &sockAddrSize) == ERROR) 
            { 
            perror ("recvfrom"); 
            close (sFd); 
            return (ERROR); 
            } 
 
        /* if client requested that message be displayed, print it */ 
 
        if (clientRequest.display) 
            { 
            /* convert inet address to dot notation */ 
 
            inet_ntoa_b (clientAddr.sin_addr, inetAddr); 
            printf ("MSG FROM CLIENT (Internet Address %s, port %d):\n%s\n", 
                inetAddr, ntohs (clientAddr.sin_port), clientRequest.message); 
            } 
        } 
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -