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

📄 udp.c

📁 《精通Unix下C语言编程与项目实践》的源代码
💻 C
字号:
#include <comlib.h>int CreateUdpSock(int * pnSock, int nPort){	struct sockaddr_in addrin;	struct sockaddr *paddr = (struct sockaddr *)&addrin;	ASSERT(pnSock != NULL && nPort > 0);	memset(&addrin, 0, sizeof(addrin));	/* 协议地址组包 */	addrin.sin_family = AF_INET;			/* 协议名 */	addrin.sin_addr.s_addr = htonl(INADDR_ANY);	/* 自动分配地址 */	addrin.sin_port = htons(nPort);			/* 端口号 */	/* 组装系统调用socket和bind */	ASSERT((*pnSock = socket(AF_INET, SOCK_DGRAM, 0)) > 0);	/* 创建UDP套接字描述符 */	if (VERIFY(bind(*pnSock, paddr, sizeof(addrin)) >= 0) )	/* 命名套接字 */		return 0;					/* 准备成功,正确返回 */	VERIFY(close(*pnSock) == 0);				/* 准备失败,关闭套接字描述符 */	return 1;}int SendMsgByUdp(void * pMsg, int nSize, char * szAddr, int nPort){	int nSock;	struct sockaddr_in addrin;    	ASSERT((nSock = socket(AF_INET, SOCK_DGRAM, 0)) > 0);	/* 创建UDP套接字描述符 */	memset(&addrin, 0, sizeof(struct sockaddr));	/* 接收方的协议地址组包 */	addrin.sin_family = AF_INET;			/* 协议名 */	addrin.sin_addr.s_addr = inet_addr(szAddr);	/* 接收方的地址 */	addrin.sin_port = htons(nPort);			/* 接收方的服务端口号 */	VERIFY(sendto(nSock, pMsg, nSize, 0,		/* 发送数据到接收方 */	             (struct sockaddr *)&addrin,	             sizeof(addrin)) > 0);	close (nSock);					/* 关闭套接字 */	return 0;}		int RecvMsgByUdp(int nFile, void * pData, int * pnSize) {	int nSize;	/* 接收数据,并不关心发送方协议地址 */	ASSERT((*pnSize=recvfrom(nFile, pData, *pnSize, 0 , NULL, NULL)) > 0);	return 0;}

⌨️ 快捷键说明

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