📄 udp.c.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 + -