由于项目需要,需对开发板千兆网口传输速率进行测试,开始想到的方法十分简单,直接在开发板上移植一个ftp服务器,然后利用Ubuntu上的ftp客户端进行文件传输,以测试网口文件传输速度,但这样做需要将测试文件放到SD卡中,而SD卡的文件传输速度十分有限,远远达不到千兆的要求,所以这样测出的速率不是千兆网口的真实传输速率,因此只能自己编写ftp服务器端来实现文件传输。
方法是先在内存中申请一块较大的内存,然后将存放于SD卡的文件首先传到此内存缓存中,然后再将文件从缓存中传输到电脑,计算文件从缓存到电脑所用的时间,即为网口的真实传输用时。注意这个过程中网线也需要是千兆的。服务器端核心代码如下:
/* 打开要传输的文件,返回其句柄 */
if((fd = open(space + 1, O_RDONLY, 0)) == -1)
{
printf("open file error.\n");
}
/* BufMax为170M,申请170M内存 */
p = (char *)malloc(BufMax);
if(p)
printf("Memory Allocated at: %x\n",p);
else
{
printf("Not Enough Memory!\n");
goto err_ret;
}
int n = 0;
for( ; ; )
{
int m;
//char bufmax[BufMax];
/* 将文件内容读到缓存buff中 */
if((n = Read(fd, buff, sizeof(buff))) == 0)
break;
bytes += n;
/* 复制buff中内容到malloc出的缓存p中 */
memcpy(p+n, buff, n); //memcpy(p+((++cnt)%19200)*n, buff, n);
}
volatile int len = 0;
while(1)
{
/* 将p中缓存的内容发送到连接套接字connfd */
len = Writen(connfd, p + len, BufMax -len);
printf(" write date to disk from ddr: %d\n", len);
if(len == 0)
break;
}
free(p);