当前位置: 技术问答>linux和unix
关于udp传输
来源: 互联网 发布时间:2015-04-19
本文导语: 基于原来tcp的基础上要改成udp. 我修改的如下: 但是觉得有点问题,怎么判断一个文件已经传输结束,可以关闭并打开新文件了呢? 在server端的这句判断while (recv_len > 0)应该是有问题的,应该怎么判断,跳出连接呢...
基于原来tcp的基础上要改成udp.
我修改的如下:
但是觉得有点问题,怎么判断一个文件已经传输结束,可以关闭并打开新文件了呢?
在server端的这句判断while (recv_len > 0)应该是有问题的,应该怎么判断,跳出连接呢?
client端:
fp = fopen (argv [2], "rb");
if(fp == NULL)
{
fputs ("file not found!!rnn", stdout);
}
else
{
fputs ("file transmitting ...rn", stdout);
while (feof (fp) == 0)
{
len = fread (send_buf, 1, BLOCK_SIZE, fp);
sendto (s, send_buf, len, 0, (struct sockaddr *)&sin, sizeof(sin));
}
fclose(fp);
fputs ("file transmit ok!!rnn", stdout);
}
close (s);
server端:
i=0
printf("waiting for data on port UDP %un", SERVER_PORT);
{
i++;
sprintf (filename, "recv_%d", i);
fp = fopen (filename, "wb+");
recv_len = 1;
while (recv_len > 0)
{
recv_len = recvfrom (new_s, recv_buf, recv_len, 0, (struct sockaddr *)&cli_addr, sizeof(cli_addr));
fwrite (recv_buf, 1, recv_len, fp);
}
fclose (fp);
close (new_s);
}
fputs ("file received ok useing udp!!rnn", stdout);
我修改的如下:
但是觉得有点问题,怎么判断一个文件已经传输结束,可以关闭并打开新文件了呢?
在server端的这句判断while (recv_len > 0)应该是有问题的,应该怎么判断,跳出连接呢?
client端:
fp = fopen (argv [2], "rb");
if(fp == NULL)
{
fputs ("file not found!!rnn", stdout);
}
else
{
fputs ("file transmitting ...rn", stdout);
while (feof (fp) == 0)
{
len = fread (send_buf, 1, BLOCK_SIZE, fp);
sendto (s, send_buf, len, 0, (struct sockaddr *)&sin, sizeof(sin));
}
fclose(fp);
fputs ("file transmit ok!!rnn", stdout);
}
close (s);
server端:
i=0
printf("waiting for data on port UDP %un", SERVER_PORT);
{
i++;
sprintf (filename, "recv_%d", i);
fp = fopen (filename, "wb+");
recv_len = 1;
while (recv_len > 0)
{
recv_len = recvfrom (new_s, recv_buf, recv_len, 0, (struct sockaddr *)&cli_addr, sizeof(cli_addr));
fwrite (recv_buf, 1, recv_len, fp);
}
fclose (fp);
close (new_s);
}
fputs ("file received ok useing udp!!rnn", stdout);
|
在server端的这行代码fwrite (recv_buf, 1, recv_len, fp);
后面添加一句:
fflush(fp);
结果就正确了.
其实,你的server端程序的逻辑是有问题的,按你的意思看是想将接收到的文件以递增序号的形式命名,而实际上你的程序是办不到的.你再好好看一看:)
后面添加一句:
fflush(fp);
结果就正确了.
其实,你的server端程序的逻辑是有问题的,按你的意思看是想将接收到的文件以递增序号的形式命名,而实际上你的程序是办不到的.你再好好看一看:)