客户端使用嵌入式开发的设备(PIC18F66J60),想移植microchip TCP/IP的协议。
客户端很简单,就是向服务器IP地址为目的IP打包数据发送和接收服务器往本IP地址的数据,一切以IP地址为唯一沟通身份,不使用DHCP。
如果想达到这样的目的,需要加载哪些TCPIP的协议呀?
Announce.c
ARP.c
DHCP.c
DNS.c
Helpers.c
ICMP.c
IP.c
MPFS.c
SPIRAM.c
StackTsk.c
TCP.c
Tick.c
UDP.c
SSL.c
FTP.c
HTTP2
NBNS.c
……
对TCPIP不了解呀,大侠指点一二吧。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
问题:最近使用Microchip TCP/IP协议栈,在应用UDP通讯的时候,偶尔会出现读不到数据的情况。(感觉每次出现这种情况都是在当:设备发送数据,服务器立马(100ms内)回复的时候设备就一直读不到了。)
平台:MPLAB V8.86
编译器:MPLAB C18 V3.44
设备硬件:PIC18F66J60
工作方式是:设备通过UDP的方式与远端服务器进行数据交换。指定收发端口号为:8889/8890,指定服务器的IP地址和MAC地址。
不知道有没有研究过Microchip TCP/IP协议栈的大侠,下面是我的UDP收发代码,参考的是Announce.c 文件里"void DiscoveryTask(void );" 程序结构:
- void MyUDPTask(void)
- {
- static enum {
- MyUDP_HOME = 0,
- MyUDP_READ,
- MyUDP_SEND,
- MyUDP_DISABLED
- } MyUDPSM = MyUDP_HOME;
-
- static UDP_SOCKET MySocket;
- NODE_INFO Remote;
-
- switch(MyUDPSM)
- {
- case MyUDP_HOME:
- if(!MACIsLinked())
- return;
- if(ServerIPAddress[0]==0xFF || ServerIPAddress[0]==0x00)
- {
- memset(&Remote, 0xFF, sizeof(Remote));
- }
- else
- {
- //only read from or send to my server.
- Remote.MACAddr.v[0]=ServerMACAddress[0];
- Remote.MACAddr.v[1]=ServerMACAddress[1];
- Remote.MACAddr.v[2]=ServerMACAddress[2];
- Remote.MACAddr.v[3]=ServerMACAddress[3];
- Remote.MACAddr.v[4]=ServerMACAddress[4];
- Remote.MACAddr.v[5]=ServerMACAddress[5];
- Remote.IPAddr.Val = ServerIPAddress[3];
- Remote.IPAddr.Val = Remote.IPAddr.Val<<8 | ServerIPAddress[2];
- Remote.IPAddr.Val = Remote.IPAddr.Val<<8 | ServerIPAddress[1];
- Remote.IPAddr.Val = Remote.IPAddr.Val<<8 | ServerIPAddress[0];
- }
- MySocket = UDPOpenEx((DWORD)&Remote,UDP_OPEN_NODE_INFO,UDPREAD_PORT,UDPSEND_PORT);
- if(MySocket == INVALID_UDP_SOCKET)
- return;
- else
- MyUDPSM = MyUDP_READ;
- break;
- case MyUDP_READ:
- if(!UDPIsGetReady(MySocket))
- {
- if(RXTimes>30)
- MyUDPSM = MyUDP_SEND;
- else
- RXTimes++;
- return;
- }
- UDPGetArray(ReadBuffer,64);
- UDPDiscard();
- //Here is my read app.
- for(i=0;i<64;i++)
- {
- ReadBuffer[i] = 0x00;
- }
- MyUDPSM = MyUDP_SEND;
- case MyUDP_SEND:
- if(!UDPIsPutReady(MySocket))
- {
- return;
- }
- //Here is my send app
- UDPPutArray((BYTE*)&SendBuffer[0],64);
- UDPFlush();
- for(i=0;i<64;i++)
- {
- SendBuffer[i] = 0x00;
- }
- MyUDPSM = MyUDP_DISABLED;
- break;
- case MyUDP_DISABLED:
- RXTimes = 0;
- UDPClose(MySocket);
- MyUDPSM = MyUDP_HOME;
- break;
- }
- }
复制代码有知晓的友友帮我看看,貌似不知道哪里不对,一头雾水。。。。一周热门 更多>