【EVB-T335试用体验】网络UDP通讯程序
<i class="pstatus"> 本帖最后由 泽泽 于 2016-7-23 21:40 编辑 </i><br /><br />
<div align="left"><font face="宋体"><font size="3">前段时间已经把串口通讯部分调试通过。</font></font></div><div align="left"><font face="宋体"><font size="3">今天来完成工业中常用的另一种通讯,网络通信。常用<font face="Times New Roman">TCP </font><font face="宋体">或者</font><font face="Times New Roman">UDP, </font><font face="宋体">由于</font><font face="Times New Roman">UDP</font><font face="宋体">不需要握手,在工业控制中比较常见,今天进行</font><font face="Times New Roman">UDP</font><font face="宋体">的测试。</font></font></font></div><div align="left"><font face="宋体"><font size="3"><font face="宋体"><br />
</font></font></font></div><div align="left"><font face="宋体"><font size="3"><font face="宋体"><font color="#ff0000"><strong>实现功能:</strong></font></font></font></font></div><div align="left"><font face="宋体"><strong><font size="4">将收到的网络UDP报文,通过串口终端打印出来。网络报文的发送通过网络调试助手发送。</font></strong></font></div><div align="left"><font face="宋体"><font size="3"><font face="宋体"><br />
</font></font></font></div><div align="left"><font face="宋体"><br />
</font></div><div align="left"><font face="宋体"><font size="5"><strong>1 UDP<font face="宋体">介绍</font></strong></font></font></div><div align="left"><font color="#333333"><font face="arial, sans-serif"><font size="3">UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。</font></font></font></div><div align="left"><font size="3">UDP 与 TCP 的主要区别在于 UDP 不一定提供可靠的数据传输。事实上,该协议不能保证数据准确无误地到达目的地。UDP 在许多方面非常有效。当某个程序的目标是尽快地传输尽可能多的信息时(其中任意给定数据的重要性相对较低),可使用 UDP。</font></div><div align="left"><font size="3">许多程序将使用单独的TCP连接和单独的UDP连接。重要的状态信息随可靠的TCP连接发送,而主数据流通过UDP发送。</font></div><div align="left"><font color="#333333"><font face="arial, sans-serif"><br />
</font></font></div><div align="left"><font face="宋体"><strong><font size="5">2 <font face="宋体">硬件连接</font></font></strong></font></div><div align="left"><font face="宋体"><font size="3">如图 :</font></font></div><div align="left">
<ignore_js_op>
</ignore_js_op>
</div><br />
<br />
<div align="left"><font face="宋体"><font face="宋体"><font size="5"><strong>3 IP地址分配</strong></font></font></font></div><div align="left"><font face="宋体"><font face="宋体"><font size="3">开发板IP: 192.168.0.100</font></font></font></div><div align="left"><font face="宋体"><font size="3">XP主机IP: 192.168.0.5</font></font></div><div align="left"><font face="宋体"><font size="3">Linux主机IP: 192.168.0.200</font></font></div><div align="left"><font face="宋体"><font size="3"><strong>网络通信,必须上面3个地址互相能ping 通 。否则无法进行网络编程。</strong></font></font></div><div align="left"><font face="宋体"><br />
</font></div><div align="left"><font size="5"><strong><font face="宋体"><font face="宋体">4 </font></font><font face="宋体"><font face="宋体">程序分析:</font></font></strong></font></div><div align="left"><font size="3">核心代码:</font></div><div align="left"><font size="3"> if( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1 ) </font></div><div align="left"><font size="3"> { </font></div><div align="left"><font size="3"> printf ("ERROR: Failed to obtain Socket Despcritor.\n");</font></div><div align="left"><font size="3"> return (0);</font></div><div align="left"><font size="3"> }</font></div><div align="left"><font size="3"> else</font></div><div align="left"><font size="3"> {</font></div><div align="left"><font size="3"> printf ("OK: Obtain Socket Despcritor sucessfully.\n");</font></div><div align="left"><font size="3"> }</font></div><div align="left"><font size="3"> </font></div><div align="left"><font size="3"> addr_local.sin_family = AF_INET; // Protocol Family</font></div><div align="left"><font size="3"> addr_local.sin_port = htons(PORT); // Port number</font></div><div align="left"><font size="3"> addr_local.sin_addr.s_addr = INADDR_ANY; // AutoFill local address</font></div><br />
<div align="left"><font size="3"> if( bind(sockfd, (struct sockaddr*)&addr_local, sizeof(struct sockaddr)) == -1 )</font></div><div align="left"><font size="3"> { printf ("ERROR: Failed to bind Port %d.\n",PORT);</font></div><div align="left"><font size="3"> return (0);</font></div><div align="left"><font size="3"> }</font></div><div align="left"><font size="3"> else</font></div><div align="left"><font size="3"> {</font></div><div align="left"><font size="3"> printf("OK: Bind the Port %d sucessfully.\n",PORT);</font></div><div align="left"><font size="3"> }</font></div><div align="left"><font size="3"> </font></div><div align="left"><font size="3"> sin_size = sizeof(struct sockaddr);</font></div><div align="left"><font size="3"> </font></div><div align="left"><font size="3"> if(num = <strong>recvfrom</strong>(sockfd, revbuf, LENGTH, 0, (struct sockaddr *)&addr_remote, &sin_size) == -1) </font></div><div align="left"><font size="3"> {</font></div><div align="left"><font size="3"> printf("ERROR!\n");</font></div><div align="left"><font size="3"> } </font></div><div align="left"><font size="3"> else</font></div><div align="left"><font size="3"> {</font></div><div align="left"><font size="3"> <strong>printf("OK: %s.\n",revbuf); //打印收到的数据</strong></font></div><div align="left"><font size="3"> }</font></div><div align="left"><font size="3"><br />
</font></div><div align="left"><font size="5"><strong><font face="宋体">5 </font><font face="宋体"><font face="宋体">程序测试:</font></font></strong></font></div><div align="left"><font face="宋体"><font size="3"><font face="宋体">程序编译 : </font></font></font><font face="宋体"><font size="3">arm-linux-gnueabihf-gcc -o udp udp001.c</font></font></div><div align="left"><font face="宋体"><font size="3">如图 :</font></font></div><div align="left">
<ignore_js_op>
</ignore_js_op>
</div><div align="left"><font face="宋体"><font size="3"><br />
</font></font></div><div align="left"><font face="宋体"><font size="3"><br />
</font></font></div><div align="left"><font face="宋体"><font size="3">将程序拷贝到开发板/mnt 中,执行UDP程序:./udp 。</font></font></div><div align="left"><font face="宋体"><font size="3">同时,用上位机 网络</font></font><font size="3"><font color="#333333">调试助手 发送报文“<strong>hello BBS.ickey.cn !</strong></font></font><font size="3"><font color="#333333">” </font></font></div><div align="left"><font size="3"><font color="#333333"><br />
</font></font></div><div align="left"><font face="宋体"><font size="3"><strong>上位机发送报文</strong>如图:</font></font></div><div align="left">
<ignore_js_op>
</ignore_js_op>
</div><div align="left"><font face="宋体"><font size="3"><br />
</font></font></div><div align="left"><font face="宋体"><font size="3"><strong>终端显示</strong>如图:</font></font></div><div align="left">
<ignore_js_op>
</ignore_js_op>
</div><br />
<br />
<br />
<br />
页:
[1]