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

📄 udpserver.c

📁 2410/vxworks/tornado下的基本实验包括 serial,ramdrv,interrupt,multi-tasking,FTP,TCP,UDP
💻 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 + -