编写的ascii文件传输出错了,请大侠看看。
来源: 互联网 发布时间:2015-04-19
本文导语: 文件发送接受成功,但是写下来的文件,比原先的文件字节数不一样,后面重复了一段。 我觉得是当文件长度不满1024byte是的那一段传送,接收,写文件时出错了,请大侠看看究竟是什么问题,怎么修改!谢谢! ...
文件发送接受成功,但是写下来的文件,比原先的文件字节数不一样,后面重复了一段。
我觉得是当文件长度不满1024byte是的那一段传送,接收,写文件时出错了,请大侠看看究竟是什么问题,怎么修改!谢谢!
程序如下,假设socket已成功建立。
BLOCK_SIZE=1024
client端程序:
BLOCK_SIZE=1024
fp = fopen (argv [2], "rb");
if(fp == NULL)
{
fputs ("file not found!!rn", stdout);
}
else
{
fputs ("file transmitting ... rn", stdout);
while (feof (fp) == 0)
{
fread (send_buf, 1, BLOCK_SIZE, fp);
send (s, send_buf, sizeof(send_buf), 0);
}
fclose(fp);
fputs ("file transmit ok!!rn", stdout);
}
server端程序:
i=0;
while (1)
{
if ((new_s = accept(s, NULL, NULL)) 0)
{
recv_len = recv (new_s, recv_buf, sizeof(recv_buf), 0 );
fwrite (recv_buf, 1, sizeof(recv_buf), fp);
}
fclose (fp);
fputs ("file received ok!!rn", stdout);
close (new_s);
}
我觉得是当文件长度不满1024byte是的那一段传送,接收,写文件时出错了,请大侠看看究竟是什么问题,怎么修改!谢谢!
程序如下,假设socket已成功建立。
BLOCK_SIZE=1024
client端程序:
BLOCK_SIZE=1024
fp = fopen (argv [2], "rb");
if(fp == NULL)
{
fputs ("file not found!!rn", stdout);
}
else
{
fputs ("file transmitting ... rn", stdout);
while (feof (fp) == 0)
{
fread (send_buf, 1, BLOCK_SIZE, fp);
send (s, send_buf, sizeof(send_buf), 0);
}
fclose(fp);
fputs ("file transmit ok!!rn", stdout);
}
server端程序:
i=0;
while (1)
{
if ((new_s = accept(s, NULL, NULL)) 0)
{
recv_len = recv (new_s, recv_buf, sizeof(recv_buf), 0 );
fwrite (recv_buf, 1, sizeof(recv_buf), fp);
}
fclose (fp);
fputs ("file received ok!!rn", stdout);
close (new_s);
}
|
补充:接收端写文件时也不能用 sizeof(recv_buf) 作为长度,应该用 recv_len.
|
是不是应该这么改:
while (recv_len > 0)
{
recv_len = recv (new_s, recv_buf, sizeof(recv_buf), 0 );
if(recv_len > 0)
fwrite (recv_buf, 1, sizeof(recv_buf), fp);
}
while (recv_len > 0)
{
recv_len = recv (new_s, recv_buf, sizeof(recv_buf), 0 );
if(recv_len > 0)
fwrite (recv_buf, 1, sizeof(recv_buf), fp);
}