UDP receive 代码

本文介绍了一个使用UDP协议进行信息接收的程序实例。该程序通过WinSock2库创建一个监听端口9001的socket,并持续接收来自客户端的消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本代码为使用UDP协议接受信息的代码。

#include <stdio.h>
#include <WinSock2.h>

int main()
{
	printf("接收方:port=9001...\n");
	
	SOCKET sock;
	sockaddr_in local;//本地ip和端口
	sockaddr_in remote;//远端ip和端口,先不用管,接收到信息后自动为其赋值
	int addr_len = sizeof(sockaddr_in);
	char buf[128];
	int len = 0;

	/*创建socket*/
	sock = socket(AF_INET, SOCK_DGRAM, 0);
	if (sock < 0)
	{
		printf("create socket failed!\n");
		return -1;
	}

	/*填写local*/
	local.sin_family = AF_INET;
	local.sin_port = htons(9001);
	local.sin_addr.s_addr = htonl(INADDR_ANY);// inet_addr("127.0.0.1");

	/*绑定端口*/
	if (bind(sock, (sockaddr*)&local, addr_len) < 0)
	{
		printf("binding socket failed!\n");
		return -1;
	}

	while (1)
	{
		memset(buf, 0, 128);
		len = recvfrom(sock, buf, sizeof(buf), 0, (sockaddr*)&remote, &addr_len);
		//len = recvfrom(sock, buf, sizeof(buf), 0, NULL, NULL);这里如果不想知道对面ip和端口的话,也可以这样写
		if (len > 0)
		{
			printf("%s\n", buf);
		}
	}

	closesocket(sock);
	return 0;
}


下面是一个简单的 Zynq LWIP UDP 接收代码示例: ```c #include <stdio.h> #include "platform.h" #include "xil_printf.h" #include "xparameters.h" #include "xil_cache.h" #include "lwip/err.h" #include "lwip/udp.h" // 定义 UDP 监听端口 #define UDP_PORT 7 // 定义接收缓冲区大小 #define RX_BUFFER_SIZE 1024 // 定义接收超时时间 #define RX_TIMEOUT_MS 1000 // 定义接收缓冲区 static u8_t rx_buffer[RX_BUFFER_SIZE]; // UDP 接收回调函数 static void udp_receive_callback(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port) { xil_printf("UDP packet received from %d.%d.%d.%d:%d, length=%d\r\n", ip4_addr1(addr), ip4_addr2(addr), ip4_addr3(addr), ip4_addr4(addr), port, p->tot_len); // 将 UDP 数据包拷贝到接收缓冲区 if (p->tot_len > RX_BUFFER_SIZE) { xil_printf("Packet too large, dropped!\r\n"); } else { pbuf_copy_partial(p, rx_buffer, p->tot_len, 0); } // 释放 pbuf pbuf_free(p); } int main() { // 初始化平台 init_platform(); // 初始化 LWIP lwip_init(); // 创建 UDP PCB struct udp_pcb *udp = udp_new(); if (!udp) { xil_printf("Failed to create UDP PCB!\r\n"); return -1; } // 绑定本地地址和端口 err_t err = udp_bind(udp, IP_ADDR_ANY, UDP_PORT); if (err != ERR_OK) { xil_printf("Failed to bind UDP PCB!\r\n"); return -1; } // 设置接收回调函数 udp_recv(udp, udp_receive_callback, NULL); // 循环接收 UDP 数据 while (1) { // 等待 UDP 数据 err_t err = udp_recv(udp, udp_receive_callback, NULL); if (err == ERR_TIMEOUT) { xil_printf("UDP receive timeout!\r\n"); } else if (err != ERR_OK) { xil_printf("Failed to receive UDP packet: %d\r\n", err); } // 处理接收到的数据 if (rx_buffer[0]) { xil_printf("Received data: %s\r\n", rx_buffer); memset(rx_buffer, 0, RX_BUFFER_SIZE); } } // 关闭 UDP PCB udp_remove(udp); // 关闭 LWIP lwip_shutdown(); // 关闭平台 cleanup_platform(); return 0; } ``` 这个示例代码创建了一个 UDP PCB,绑定了本地地址和端口,并设置了接收回调函数。然后进入一个循环,等待 UDP 数据到达,接收到数据后会将数据拷贝到接收缓冲区中,并在控制台上打印出接收到的数据。注意这个示例没有使用操作系统,如果你的应用程序使用了操作系统,请根据操作系统的要求修改代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值