socket传送文件问题

nanjingnew4 2011-07-21 10:13:47
说下情况
发送文件

while(sendfd=fread(ch,sizeof(char),256,fp)>0)
{
send(sockfd,ch,sendfd,0);
}
fclose(fp);
close(sockfd);


接收并写入文件
do{
if((recvfd=recv(acceptfd,ch,256,0))==-1)
{
printf("error in recv.\n";
break;
}

fwrite(ch,1,sizeof(ch),fp);

}while(recvfd > 0);

不明白接收回来后为什么会有乱码现象,还有这个nonel是什么意思




如下:
/usr/zhao1/file/ftp.sh 1>/usr/zhao1/file/filename.txt 2>&1

cat /usr/zhao1/file/filename.txt |ftp -n
mv /usr/zhao1/*.dmp /usr/zhao1/mas.exp
rm /usr/zhao1/file/filename.txt
下面跟乱码
"copy_file.txt" [noeol] 6L, 256C
...全文
71 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
勤奋的沉沦 2011-08-22
  • 打赏
  • 举报
回复
fwrite(ch,1,sizeof(ch),fp);
有问题。应该写入读取的字节数。
butnet 2011-08-21
  • 打赏
  • 举报
回复
recv 如果成功返回的是读取的字节数,如果没有读取到你的缓冲区的长度那么长的数据,你必须判读一下,然后fwrite的时候才不会出错,不然如果只读取了20个字节的数据 你却fwrite了256个数据的话,程序就会有问题
冻结 2011-08-21
  • 打赏
  • 举报
回复
fread,fwrite这两个C函数,会用到自己的缓存机制。
而它的缓存机制和send,recv,混合使用,问题很多。
用read和write吧,或者禁用缓存机制。
牛晨光 2011-07-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chrisniu1984 的回复:]

你可以看一下recv的返回值是什么意思,然后测试下是不是捏fwrite的sizeof(ch)参数是不是有问题。
[/Quote]

顺便说一下,你的图片我好像看不到!
牛晨光 2011-07-21
  • 打赏
  • 举报
回复
你可以看一下recv的返回值是什么意思,然后测试下是不是捏fwrite的sizeof(ch)参数是不是有问题。

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧