共2条
1/1 1 跳转至页
ZLG,TCP,IP 我们想用ZLG的TCP/IP模块,可不知稳定性如何?
问
不知内部的东东是自己写的,还是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,苦于没人一起讨论,目前在ZLG的TCP/IP基础上已实现snmp的基本操作,但还在功能上继续完善,而且初步测试性能上也不行,主要原因应该在于TCP/IP协议栈
有过做snmp经验的或是将要做snmp的朋友可以加我MSN:yamoon@ciitz.net
答 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,苦于没人一起讨论,目前在ZLG的TCP/IP基础上已实现snmp的基本操作,但还在功能上继续完善,而且初步测试性能上也不行,主要原因应该在于TCP/IP协议栈
有过做snmp经验的或是将要做snmp的朋友可以加我MSN:yamoon@ciitz.net
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动——B站互动赢积分】活动开启啦! | |
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |