新浪博客

1. int simple_server(void)
2. {
3. unsigned int plen,dat_p,i1=0,payloadlen=0;
4. unsigned char i=0,*buf1 = 0;
5. signed char cmd;
6.
7. // 将自己设定的mac,ip,wwwport赋值给系统变量
8. init_ip_arp_udp_tcp(mymac,myip,mywwwport);
9.
10. printf('\r神舟III号MAC地址:0x%x,0x%x,0x%x,0x%x,0x%x,0x%x',mymac[0],mymac[1],mymac[2],mymac[3],mymac[4],mymac[5]);
11. printf('\r IP地址:%d.%d.%d.%d',myip[0],myip[1],myip[2],myip[3]);
12. printf('\r 端口号:%d\r\r',mywwwport);
13.
14. while(1)
15. {
16. // 判断是否有接收到有效的包 ,ETH包,不包含校验CRC
17. plen = enc28j60PacketReceive(BUFFER_SIZE, buf);
18. // 如果收到有效的包,plen将为非0值。
19. if(plen==0)
20. {
21. // 没有收到有效的包就退出重新检测
22. continue;
23. }
24.
25. // 查询ETH包头的类型/长度字节,如果收到目的地址为本机IP的ARP包,则发送一个ARP应答包
26. if(eth_type_is_arp_and_my_ip(buf,plen))
27. {
28. // 如果是返回ARP包
29. make_arp_answer_from_request(buf);
30. continue;
31. }
32.
33. // 如果接收的目的地址不是本机IP的合法IP包,则重新检测
34. if(eth_type_is_ip_and_my_ip(buf,plen)==0)
35. {
36. // 没有收到有效的包就退出重新检测
37. continue;
38. }
39.
40. // 如果收到ICMP包,并且是ICMP回射请求包 ,则发送一个ICMP回射应答包(判断两个终端之间是否有效连接)
41. if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V)
42. {
43. printf('\r收到主机[%d.%d.%d.%d]发送的ICMP包',buf[ETH_ARP_SRC_IP_P]
44. ,buf[ETH_ARP_SRC_IP_P+1]
45. ,buf[ETH_ARP_SRC_IP_P+2]
46. ,buf[ETH_ARP_SRC_IP_P+3]);
47. make_echo_reply_from_request(buf, plen);
48. continue;
49. }
50.

我的更多文章

下载客户端阅读体验更佳

APP专享