当前位置: 技术问答>linux和unix
socket传送文件问题
来源: 互联网 发布时间:2016-12-24
本文导语: 说下情况 发送文件 while(sendfd=fread(ch,sizeof(char),256,fp)>0) { send(sockfd,ch,sendfd,0); } fclose(fp); close(sockfd); 接收并写入文件 do{ ...
说下情况
发送文件
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
发送文件
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
|
你可以看一下recv的返回值是什么意思,然后测试下是不是捏fwrite的sizeof(ch)参数是不是有问题。
|
recv 如果成功返回的是读取的字节数,如果没有读取到你的缓冲区的长度那么长的数据,你必须判读一下,然后fwrite的时候才不会出错,不然如果只读取了20个字节的数据 你却fwrite了256个数据的话,程序就会有问题
|
fread,fwrite这两个C函数,会用到自己的缓存机制。
而它的缓存机制和send,recv,混合使用,问题很多。
用read和write吧,或者禁用缓存机制。
而它的缓存机制和send,recv,混合使用,问题很多。
用read和write吧,或者禁用缓存机制。
|
fwrite(ch,1,sizeof(ch),fp);
有问题。应该写入读取的字节数。
有问题。应该写入读取的字节数。