导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→用KEIL C51编的UDP打包程序

* 80647: 用KEIL C51编的UDP打包程序

   whutfrank515 
whutfrank515发表的帖子 

 用KEIL C51编的UDP打包程序
本人现在在编udp打包的程序,下面是相关的程序:


在程序头文件中定义的UDP数据报的结构:
struct tagEthernet
{
 _US len; // 为data字段的实际长度
 _UC dest[6];
 _UC src[6];
 _US type;
 _UC ethdata[1];
};
struct tagIP
{
 _UC ver_hl;
 _UC tos;
 _US len;
 _US id;
 _US flag_off;
 _UC ttl;
 _UC proto;
 _US chksum;
 union
 {
  _UL longSrc;
  _UC byteSrc[4];
 } src;
 union
 {
  _UL longDest;
  _UC byteDest[4];
 } dest;
 _UC ipdata[1];
};
struct tagUDP
{
 _US src;
 _US dest;
 _US len;
 _US chksum;
 _UC udpdata[1];
};


extern _UC xdata buffer[2400];
#define p ((struct tagEthernet*)buffer)


// IP层提供的函数
#define iphdr ((struct tagIP*)(p->  ethdata))
void ip_input();
void ip_output(_UL dest, _UC proto);

// UDP层提供的函数
#define pUdp ((struct tagUDP*)(((struct tagIP*)(p->  ethdata))->  ipdata));
void udp_input(_US len);
void udp_output(_US L);

下面是部分KEIL C51编的UDP打包程序

//UDP打包函数
void udp_output(_US L)

 //设置UDP头
  pUdp->  src=1025;
  pUdp->  dest=1024;
  pUdp->  len=L+8;
  pUdp->  chksum=udp_chksum();
  //设置IP头、以太网帧头
 ip_output(iphdr->  src.longSrc,17); //proto=17表示上层协议是udp
 //发送数据
 p->  len=(pUdp->  len)+(20+14);  //20为IP头长度、14为以太帧长度
 Send();
}

在对UDP打包程序进行编译时,总是提示dest,src,len以及chksum没有定义或语法错误。UDP提供的函数中这个宏定义#define pUdp  ((struct tagUDP*)(((struct tagIP*)(p->  ethdata))->  ipdata));好象没起作用。
  恳请那位对UDP有所 了解的大侠呢感指点一下。谢谢啦!

发表时间:2005年7月1日9:29:24

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:keil编译问题,请进来看看我用keil编译时,出现这样的警告: MULTIPLE 
[下一篇帖子]:[求助]:为什么我改 startup.a51 不成功受下文的启发,我仿照其方式改