完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
使用 CH579单独实现TCP服务器通信 或 UDP服务器通信都正常
在CH579上同时使用TCP服务器和UDP服务器的时候,TCP服务器能正常工作,UDP服务器收发成功1次后,就再也无法通信了? CH579的网络协议栈不能同时支持 TCP和UDP服务器吗? void CH57xNET_CreatTcpSocket(void) { UINT8 i; SOCK_INF TmpSocketinf; /* 创建临时socket变量 */ printf("Tcp port:%drn", CARD_CFG_TCP_PORT); memset((void *)&TmpSocketInf,0,sizeof(SOCK_INF)); /* 库内部会将此变量复制,所以最好将临时变量先全部清零 */ TmpSocketInf.SourPort = CARD_CFG_TCP_PORT; /* 设置源端口 */ TmpSocketInf.ProtoType = PROTO_TYPE_TCP; /* 设置socekt类型 */ TmpSocketInf.RecvStartPoint = (UINT32)SocketRecvBuf; /* 设置接收缓冲区的接收缓冲区 */ TmpSocketInf.RecvBufLen = RECE_BUF_LEN ; /* 设置接收缓冲区的接收长度 */ i = CH57xNET_SocketCreat(&gSerSocketId,&TmpSocketInf); /* 创建socket,将返回的socket索引保存在SocketId中 */ mStopIfError(i); /* 检查错误 */ #ifdef KEEPLIVE_ENABLE CH57xNET_SocketSetKeepLive(gSerSocketId, 1 ); /* 开启socket的KEEPLIVE功能(V06版本支持) */ #endif i = CH57xNET_SocketListen(gSerSocketId); /* TCP连接 */ mStopIfError(i); /* 检查错误 */ i = CH57xNET_SetSocketTTL(gSerSocketId,128 ); mStopIfError(i); /* 检查错误 */ } void CH57xNET_CreatUdpSocket(void) { UINT8 i; SOCK_INF TmpSocketInf; /* 创建临时socket变量 */ //创建UDP socket目的IP和端口号任意设定 UINT8 DESIP[4] = {255,255,255,255}; memset((void *)&TmpSocketInf,0,sizeof(SOCK_INF)); /* 库内部会将此变量复制,所以最好将临时变量先全部清零 */ memcpy((void *)TmpSocketInf.IPAddr,DESIP,4); /* 设置目的IP地址 */ TmpSocketInf.DesPort = 2000; /* 设置目的端口 */ TmpSocketInf.SourPort = UDP_LOCAL_DEFAULT_PORT; /* 设置源端口 */ TmpSocketInf.ProtoType = PROTO_TYPE_UDP; /* 设置socekt类型 */ TmpSocketInf.AppCallBack = CH57xNET_UdpServerRecv; /* 接收回调函数 */ TmpSocketInf.RecvStartPoint = (UINT32)SocketRecvBuf[0]; /* 设置接收缓冲区的接收缓冲区 */ TmpSocketInf.RecvBufLen = RECE_BUF_LEN ; /* 设置接收缓冲区的接收长度 */ i = CH57xNET_SocketCreat(&gUdpSocketId,&TmpSocketInf); /* 创建socket,将返回的socket索引保存在SocketId中 */ mStopIfError(i); /* 检查错误 */ } void Ch579EthInit(void) { UINT8 iret = 0; UINT8 myIpAddr[4]={0}; UINT8 myGwIpAddr[4]={0}; UINT8 myGwIpMask[4]={0}; printf("IP_ADDR:%xrn", CARD_CFG_ETH_IP); //printf("MASK:%xrn", CARD_CFG_ETH_MASK); myIpAddr[0] = (CARD_CFG_ETH_IP>>24)&0xff; myIpAddr[1] = (CARD_CFG_ETH_IP>>16)&0xff; myIpAddr[2] = (CARD_CFG_ETH_IP>>8)&0xff; myIpAddr[3] = (CARD_CFG_ETH_IP>>0)&0xff; myGwIpAddr[0] = (CARD_CFG_ETH_GATE>>24)&0xff; myGwIpAddr[1] = (CARD_CFG_ETH_GATE>>16)&0xff; myGwIpAddr[2] = (CARD_CFG_ETH_GATE>>8)&0xff; myGwIpAddr[3] = (CARD_CFG_ETH_GATE>>0)&0xff; myGwIpMask[0] = (CARD_CFG_ETH_MASK>>24)&0xff; myGwIpMask[1] = (CARD_CFG_ETH_MASK>>16)&0xff; myGwIpMask[2] = (CARD_CFG_ETH_MASK>>8)&0xff; myGwIpMask[3] = (CARD_CFG_ETH_MASK>>0)&0xff; GetMacAddr(MACAddr); GetMacAddr(CARD_CFG_ETH_MAC); //ShowDataHex((u8 *)&myIpAddr, 4); iret = CH57xNET_LibInit((u8 *)myIpAddr,(u8 *)&myGwIpAddr,(u8 *)&myGwIpMask,CARD_CFG_ETH_MAC); mStopIfError(iret); NVIC_EnableIRQ(ETH_IRQn); iret = 0; while ( CH57xInf.PHYStat < 2 ) { DelayMs(50); iret++; if(iret > 200) //等待10秒钟超时 { break; } } //同时创建TCP服务器和UDP服务器时,UDP接收发送1次后,再也无法接收数据??????? //创建工作端口TCP SOCKET //CH57xNET_CreatTcpSocket(); //创建 30000 固定端口TCP SOCKET //CH57xNET_CreatTcpSocket3W(); //创建UDP socket CH57xNET_CreatUdpSocket(); } |
|
相关推荐
2个回答
|
|
您好,CH579是可以实现同时跑TCP与UDP的。如果您UDP发送一次就无法通讯,您可以看看CH579是不是报了Time out中断。然后您也可以同步打开wireshark,抓包看看,tcp有没有三次握手。或者断开
|
|
|
|
您好,您这个UDP是广播发送,您看一下是不是进入了CH57xNET_UdpServerRecv函数,UDP广播的接收是进入到哦这个接收函数处理的。
|
|
|
|
只有小组成员才能发言,加入小组>>
261 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2739 浏览 2 评论
2256 浏览 1 评论
BLE-Dongle与CH9141-A核心板进行双向透传,无法接收到串口数据怎么解决?
486浏览 7评论
226浏览 4评论
主机NRF52832从机ch9141,ch9141断电后无法发送数据怎么解决?
406浏览 3评论
295浏览 3评论
281浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-18 03:28 , Processed in 1.002922 second(s), Total 80, Slave 64 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号