你直接编写一个UDP/TCP程序和PC机通信,让PC机发送几百兆数据给设备,设备直接抛弃数据,在PC侧统计用时,用数据量/时间就是速率了,比TFTP统计还准。而且可以测试多线程下载,打开多条链路,看看多线程对协议栈传输的影响。<br /><br />《ecos增值包》也中有TFTP源码,硬件无关。<br /><br />这是《ecos增值包》中PC上位机的测试范例:<br /><br />//此程序配合开发板webserver.c调试<br /><br />#include <stdio.h><br />#include "winsock2.h"<br />#include "windows.h"<br /><br />void main() {<br /><br /> //----------------------<br /> // Initialize Winsock.<br /> WSADATA wsaData;<br /> SOCKET ConnectSocket;<br /> struct sockaddr_in clientService; <br /> int bytesSent,numread,filesize;<br /> DWORD dwStart,dwEnd;<br /> double delta,rate;<br /> unsigned char sendbuf[1];<br /><br /> FILE *fp;<br /><br /> int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);<br /><br /> if( (fp = fopen( "c:y.pdf", "rb" )) == NULL ){<br /> printf("Problem opening the file
");<br /> return;<br /> }<br /><br /> filesize = 0;<br /><br /> if (iResult != NO_ERROR)<br /> printf("Error at WSAStartup()
");<br /><br /> //----------------------<br /> // Create a SOCKET for connecting to server<br /> ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);<br /> if (ConnectSocket == INVALID_SOCKET) {<br /> printf("Error at socket(): %ld
", WSAGetLastError());<br /> WSACleanup();<br /> return;<br /> }<br /><br /> //----------------------<br /> // The sockaddr_in structure specifies the address family,<br /> // IP address, and port of the server to be connected to.<br /> clientService.sin_family = AF_INET;<br /> clientService.sin_addr.s_addr = inet_addr( "192.168.0.6" );<br /> clientService.sin_port = ntohs( 2280 );//2280 for 1 channel tcp test ; 2290 for multi tcp test<br /><br /> //----------------------<br /> // Connect to server.<br /> if ( connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {<br /> printf( "Failed to connect.
" );<br /> WSACleanup();<br /> return;<br /> }<br /><br /> dwStart = GetTickCount();<br /> while( !feof( fp ) ){<br /> numread = fread( sendbuf, sizeof( char ), sizeof(sendbuf), fp );<br /> if( ferror( fp ) ) {<br /> perror( "Read error" );<br /> break;<br /> }<br /> bytesSent = send( ConnectSocket, sendbuf, numread, 0 );<br /> filesize = filesize + numread;<br /> }<br /> dwEnd = GetTickCount();<br /><br /> delta = (dwEnd - dwStart) / 1000.0;<br /> if(delta < 1E-6 && delta >= 0.0)<br /> rate = 0;<br /> else<br /> rate = filesize * 8 / 1000.0 / delta;<br /> printf("File size=%d(bytes) , trans time=%lf(s) , trans rate=%lf(Kbps)
",filesize,delta,rate);<br /><br /> printf("Press any key to continue...
");<br /> getchar();<br /><br /> WSACleanup();<br /> fclose(fp);<br /> return;<br />}<br /><br /><b><font color=#FF0000>上述文档可能不完整或已被更新,想获得该资料的最新最全版本,请访问:</font>www.armecos.com</b><br /><br /><b>更多内容,详见:</b><br /><b>我的培训中心</b><br /><b>我的研发团队</b><br /><b>我的技术顾问</b><br /> <b>文件系统整体解决方案咨询套餐</b><br /> <b>IP协议栈整体解决方案咨询套餐</b><br /> <b>USB整体解决方案咨询套餐</b><br /> <b>BootLoader整体解决方案咨询套餐</b><br />
|