📄 udpserver.c
字号:
/*udpServer.c - UDP 服务器 端程序*/
/* includes */
#include "vxWorks.h"
#include "sockLib.h"
#include "inetLib.h"
#include "stdioLib.h"
#include "strLib.h"
#include "hostLib.h"
#include "ioLib.h"
#include "udpExample.h"
/*********************************************************************
*
*udpServer -- 读取UDP套接字,依请求显示客户端发送信息
*
*
*返回值: ERROR 或 不返回
*
***********************************************************************/
STATUS udpServer(void)
{
struct sockaddr_in serverAddr; /*服务器套接字地址*/
struct sockaddr_in clientAddr; /*客户端套接字地址*/
struct REQUEST clientRequest; /*客户端的请求和信息*/
int sockAddrSize; /*套接字地址数据结构大小*/
int sFd; /*套接字文件描述符*/
char inetAddr[INET_ADDR_LEN]; /*客户端网络地址缓存*/
/*设置本地地址*/
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);
/*生成UDP套接字*/
if((sFd = socket(AF_INET,SOCK_DGRAM,0)) == ERROR)
{
perror("socket \n");
return ERROR;
}
/*绑定套接字*/
if(bind(sFd,(struct sockaddr *)&serverAddr, sockAddrSize) == ERROR)
{
perror("bind \n");
close(sFd);
return(ERROR);
}
/*读取套接字,响应请求*/
FOREVER
{
if(recvfrom(sFd,(char*)&clientRequest,sizeof(clientRequest),0,
(struct sockaddr *)&clientAddr, &sockAddrSize) == ERROR)
{
perror("recvfrom \n");
close(sFd);
return(ERROR);
}
/*依请求显示客户端发送的信息*/
if(clientRequest.display)
{
/*网络地址格式转换*/
inet_ntoa_b(clientAddr.sin_addr,inetAddr);
printf("Message from client(IP Address %s, port %d) : \n%s\n",
inetAddr,ntohs(clientAddr.sin_port),clientRequest.message);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -