OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » ZLG,TCP,IP 我们想用ZLG的TCP/IP模块,可不知稳定性如何?

共2条 1/1 1 跳转至

ZLG,TCP,IP 我们想用ZLG的TCP/IP模块,可不知稳定性如何?

院士
2006-12-22 22:43:00    评分
ZLG,TCP,IP 我们想用ZLG的TCP/IP模块,可不知稳定性如何?



关键词: 我们     想用     模块     不知     稳定性     如何    

院士
2006-12-22 22:43:00    评分
2楼
问 不知内部的东东是自己写的,还是philips或其它公司的. 1: 很多东西要自己修改,看你产品的等级程序。我修改了一个多月才算好用一点 2: 是这样吗我也想用,还想靠它实现SNMP,就是不知从何下手,请各位指点! 3: 我诚心诚意的推荐zlip虽然流控制还是不完整,但整体结构和性能要好很多,而且移植比较简单,如果你不是很苛求性能的话 4: 我也改了好久...还是不好用...性能上始终不能满足要求 5: 很多是边边角角的问题,只有使用过程中才会慢慢发现。 6: 看来还是用linux ARM会更好有完整的tcp/ip协议,成本就得200-300,批量大还可以。 7: 有的协议栈还不错的占资源也小 8: to eleven11zlip连udp都不支持,怎么用呀 9: 完全是我们自己写的,而且已经有几万个产品的实用案例!    当然,学习开发套件的版本是最初级的,如果有一定的基础是可以通过适当的修改使用的。如果需要稳定的商业化版本,我们不提供任何形式的代码,甚至包括OBJ文件,因为很少有人尊重厂商的知识产权,所以我们不对外销售源代码,但是可以购买我们公司的TC/IP转换器系列产品,或者购买我们即将推出的ARM嵌入式工控模块,一些模块是内嵌了TCP/IP软件代码的,虽然已经加密,但是完全供用户二次开发调用。
     10: to yutu2UDP协议是很简单的,因为只是添加报头转到IP层发送出去,我这里有示范性的代码,你可以看看,协议栈一旦有了完整的网络协议会提供免费版本的

void UDPRecv(MEM_PCB XDATA *pMem, BYTE NetIfNo) REENTRANT
{
   UDP_SOCKET XDATA *pUCB;
   UDP_HEAD XDATA *pUdpHead = (UDP_HEAD XDATA *)(pIPHead + IPHeadLen);//计算UDP首地址
   #ifdef Little_End
   WORD UdpTotalLen = ntohs(pUdpHead->UDPTotalLen);//计算UDP总长度
   #else
   WORD UdpTotalLen = pUdpHead->UDPTotalLen;
   #endif
   
   #if UDP_CHECKSUM_EN == 1
   if (TCP_UDPCheckSum(pIPHead, UdpTotalLen) != 0)//UDP效验
   {
      MemFree(pMem);
      return;
   }
   #endif

   if (pUCBList != NULL)//若UDPsocket链表不为0
   {
      pUCB = pUCBList;//搜索链表,找对应socket
      do
      {
         if (pUCB->RemoteIP == pIPHead->SourIP)
         if (pUCB->SinIP == pIPHead->DistIP)
         if (pUCB->RemotePort == pUdpHead->SourPort)
         if (pUCB->SinPort == pUdpHead->DistPort)
         {
            pUCBList = pUCB;
            goto UDP_Process;
         }
         pUCB = pUCB->pNext;
      }
      while (pUCB != pUCBList);
   }  
   
   ICMPUnarrival(pMem, ICMP_CODE_PORT_UNARRIVAL);//若未找到,返回icmp
   MemFree(pMem);
   return;
   
   UDP_Process://UDP进程,根据端口号分支
   switch (pUdpHead->SourPort)
   {
      case DHCP_CLIENT_PORT://DHCP
        break;
      case DHCP_SERVES_PORT://DHCP
        break;
      default:
        pUCB->UDPDataRecv((BYTE XDATA *)pUdpHead + UDP_HEAD_LEN, UdpTotalLen - UDP_HEAD_LEN);//无特点含义端口的数据接收
        break;
   }
   MemFree(pMem); //释放内存块     
}

void UDPSend(MEM_PCB XDATA *pMem, UDP_SOCKET XDATA *pUCB) REENTRANT
{
   UDP_HEAD XDATA *pUdpHead;

   pMem->UsedSize += UDP_HEAD_LEN;//添加要发送的数据数目
   //以下添加UDP报头
   pUdpHead = (UDP_HEAD XDATA *)(POINT_IP(pMem->MemAddr) + IP_MIN_HEAD_LEN);
   pUdpHead->CheckSum = 0;
   #ifdef Little_End
   pUdpHead->SourPort = ntohs(pUCB->SinPort);
   pUdpHead->DistPort = ntohs(pUCB->RemotePort);
   pUdpHead->UDPTotalLen = ntohs(pMem->UsedSize);   
   pUdpHead->CheckSum = ntohs(TCP_UDPCheckSum(pIPHead, pMem->UsedSize));
   #else
   pUdpHead->SourPort = pUCB->SinPort;
   pUdpHead->DistPort = pUCB->RemotePort;
   pUdpHead->UDPTotalLen = pMem->UsedSize;   
   pUdpHead->CheckSum = TCP_UDPCheckSum(pIPHead, pMem->UsedSize);   
   #endif
   
   IPSend(pMem, pUCB->RemoteIP, IP_PCOL_UDP);//转到IP层发送
} 11: 谢谢eleven11你用过SNMP协议吗,能不能指导我一下,谢谢! 12: 我花了很大的时间完善zlip现在已经移植到ARM7上了,在修改原来的代码基础上加了udp嵌套口,加上了ping ,加上了基于udp的dgcp,telnet,加上了http服务器,以及cgi程序。还有smtp和pop3协议,完全可以收发电子邮件了。我看了周立功的以太网络产品,上面的功能我都分析了,可以实现了。
其实tcp/ip协议没有什么神秘的,有了很好的c语言基础,再分析一下网络协议,最好是查看对应的rfc文档,然后在下栽一个监视软件,花点时间就可以搞定。

提醒想要一直zlip的朋友:
1,注意ads中指针类型的指定。
2,注意前后台程序中后台程序的循环查询等待,要修改。
3,多处htons,htonl的错误,希望有耐心去调试。
4,不修改协议的时候,发送tcp包的时候要注意不要发送大于1460的包。8019吃不消化。
5,一定要修改内存分配部分,使4位对齐,否则必定死机。
6,在包结构中放弃4字节对齐。加上关键字__packed
7,可以缩短时间中断,以提高速度,但一定要修改对应的预定义,使等待充发等时间不变。
13: 这里也有朋友在做snmp呀能留个联系方式吗,最近一直在做snmp,苦于没人一起讨论,目前在ZLGTCP/IP基础上已实现snmp的基本操作,但还在功能上继续完善,而且初步测试性能上也不行,主要原因应该在于TCP/IP协议栈

有过做snmp经验的或是将要做snmp的朋友可以加我MSN:yamoon@ciitz.net

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]