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

📄 udp.c.bak

📁 CP2201和51单片机实现ARP ICMP IP UDP协议
💻 BAK
字号:
#include "ne2000.h"
#include "ip.h"
#include "netcomm.h"

extern union NetNode xdata myNode;
void udp_send(INT8U xdata *inbuf,union ip_address_type sender_ipaddr,INT16U source_port,INT16U dest_port, INT16U len)
{      
    	udp_head xdata *udp;
    	ip_head xdata *ip;
	INT16U idata i;
	INT32U idata sum;
	INT16U idata result;
	INT8U xdata outbuf[342];
	if(len>300)
	return;
	for(i=42;i<len+42;i++)
        outbuf[i]=*inbuf++;
	ip=(ip_head xdata *)(outbuf+14);
	udp=(udp_head xdata *)(outbuf+34);    //将数据放入UDP数据区
	udp->destport =dest_port;                //sender_udpport; //
	udp->sourceport = source_port;       //
	udp->length=8+len;                  //
	udp->crc=0;                         //
	for(i=0;i<4;i++)                     //
	 {
	 	ip->sourceip[i]=myNode.nodebytes.ipbytes[i];
	     	ip->destip[i]=sender_ipaddr.bytes[i];
          }
    	sum = (INT32U)chksum((outbuf+26), udp->length+8);
    	sum += (INT32U)0x0011;
	sum += (INT32U)udp->length;
	result = (INT16U)(sum + (sum >> 16));
	udp->crc=~result; 
    ip_send(outbuf,sender_ipaddr,17,udp->length );
       
}
void udp_rcve(INT8U xdata *inbuf,INT16U len)
{
    udp_head xdata *udp;
    ip_head xdata *ip;
	INT32U idata sum;
	INT16U idata result;
	udp=(udp_head xdata *)(inbuf+34);
	ip=(ip_head xdata *)(inbuf+14);
    	sum = (INT32U)chksum(inbuf+26, 8+len);
    	sum += (INT32U)0x0011;
	sum += (INT32U)udp->length;
	result = (INT16U)(sum + (sum >> 16));
	if(result==0xffff)
	{
		if(udp->destport==2000)
		{
			/***********************数据处理*******************/
	        }
	        else return;
	 }
	else return;
}
		
	

⌨️ 快捷键说明

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