当前位置:  技术问答>linux和unix

为什么Linux网络传输文件的程序,在本机接收和发数据都没错,发到别的电脑上就会接收多了几百个字节呢???

    来源: 互联网  发布时间:2017-05-26

    本文导语:  我编写了两个Linux网络传输文件的程序,采用TCP协议,一个客户端,一个服务器,客户端向服务器发数据,如果在本机互发就不会出错,但是在本机运行客户端,另一台电脑运行服务端,然后客户端发数据过去,服务...

我编写了两个Linux网络传输文件的程序,采用TCP协议,一个客户端,一个服务器,客户端向服务器发数据,如果在本机互发就不会出错,但是在本机运行客户端,另一台电脑运行服务端,然后客户端发数据过去,服务器接收了,但是多了几百个字节,文件也打不开,这是什么原因导致的呢???
我是新手,求大神帮忙!!部分代码:

客户端:
......
/*以二进制方式打开文件,并且获取文件名跟文件长度*/
FILE *filefd;
filefd =fopen(argv[2],"rb");
if (filefd == NULL)
{printf ("Open file failed.n");
 exit(1);
}
char *FILE_LEN;
FILE_LEN = argv[2];
stat (FILE_LEN,&buf); //计算文件长度

char file_name[2048];
char file_len[2048];
memset(file_name, 0, sizeof(file_name)); //清空存放文件名的数组内存单元
sprintf(file_name, "%s", argv[2]); //把文件名放到file_name数组里
memset(file_len, 0, sizeof(file_len)); //清空存放长度的数组内存单元
sprintf(file_len, "%d",buf.st_size); //把文件长度放到file_len数组里

gettimeofday(&tv1,&tz1); //获取当前时间
/*先发送文件名跟文件长度给服务器端*/
if ((sendbytes = send(sockfd, file_name, sizeof(file_name), 0)) == -1)
{
perror("send");
exit(1);
}
if ((sendbytes = send(sockfd, file_len, sizeof(file_len), 0)) == -1)
{
perror("send");
exit(1);
}

/*再发送文件内容给服务器端*/
int sumbytes;
sumbytes =0;
while ((read_len = fread(buff, 1, sizeof(buff),filefd)) > 0)
{
if ((sendbytes = send(sockfd, buff, read_len, 0)) == -1)
{
perror("send");
exit(1);
}
sumbytes +=sendbytes;
}





服务端:


.......
/*调用recv函数接收文件名,然后创建文件*/
gettimeofday(&tv1,&tz1); //获取当前时间
memset(buf , 0, sizeof(buf));
if ((recvbytes = recv(client_fd, buf, BUFFER_SIZE, 0)) == -1)
{
perror("recv");
exit(1);
}
sscanf(buf, "%s", file_name);
FILE *filefd;
filefd =fopen(file_name,"w");
printf("The received file is :%sn",file_name);
printf("buf1 is:%sn",buf);
/*接受文件长度*/
memset(buf , 0, sizeof(buf));
if ((recvbytes = recv(client_fd, buf, BUFFER_SIZE, 0)) == -1)
{
perror("recv");
exit(1);
}
sscanf(buf, "%d",&file_len);
printf("The length of the received file is :%d 字节n",file_len);
printf("buf2 is:%sn",buf);
/*再接收文件内容*/
memset(buf , 0, sizeof(buf));
Byte_sum = 0;
while(Byte_sum file_len)
{
 bytes =Byte_sum -file_len;
 recvbytes -=bytes;
}
fwrite(buf,1,recvbytes,filefd);

}

|
看描述比较诡异,自己调试一下,首先确定是发送端的问题还是接收端的问题,可以先调客户端,多出来的是不是客户端发送的

    
 
 

您可能感兴趣的文章:

  • Linux下,怎么设置可以让一个端口只对本机可用,对共网不开放?
  • 在线的帮忙解决linux下telnet本机的8899端口响应很慢
  • linux下本机可以运行jsp网站,但是其他机子访问不了
  • 请问linux下如何查看本机内核是32位还是64位的?
  • 在linux下如何知道本机的名称呢
  • 怎么制作linux引导盘/本机intel pc/无光驱/连在局域网/想ftp安装/无引导盘
  • 请问如何通过命令来获得本机linux的ip地址?
  • linux下如何用c++/c获取本机ip地址
  • 如何从xshell 上把linux上的文件复制到本机
  • 哪位仁兄可以告诉我在linux下如何访问本机windows下的文件?
  • Linux下如何得到本机显卡信息
  • 虚拟机Linux与本机XP共享的两个问题
  • linux如何查看本机ip,子网掩码和网关,谢谢,急用!
  • linux下用什么命令可以列出本机的所有用户
  • redhat linux9.0下的vsftpd本机可以登录,而其它机子不能连接,求救?
  • Linux下怎么获得本机的IP地址?
  • linux下如何在程序中访问本机的ARP表
  • linux下通过多播获取本机IP地址,不成功啊?
  • 其他机无法访问linux下tomcat,本机可以访问,其他机可PING到linux的IP,防火墙都已禁用?
  • 如何用JAVA执行本机Linux操作系统的可执行文件?一定给分!在线等待!
  • 怎么实现Windows和Linux之间数据的接收发送
  • Linux下怎么用socket接收zip文件流?怎么把zip文件读成流?
  • 嵌入式linux 组播接收问题
  • 讨论一下:linux和lwip中的接收缓冲区结构哪个好呢?
  • 如何让linux不自动接收服务器发来的ipv6地址
  • linux 如何接收发送邮件?
  • 高手请进:LINUX端口数据接收问题
  • Linux下的Qmail、Sendmail是怎样来判断邮件发送和接收。
  • 如何在Linux运行期间终止网卡接收数据?
  • Linux下,如何读取网卡接收的数据包啊?
  • 请问在linux上tcp能够接收的最大连接数是多少?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何在Linux下用C++实现读取整个目录的网络传输
  • linux 网络传输问题
  • linux无线网络传输也可以直接使用socket接口编程吗?
  • Linux网络编程之socket文件传输示例
  • Linux网络编程之基于UDP实现可靠的文件传输示例
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • 如何让win2000和linux共存。我装好WIN2000,再装LINUX7.0,但LILO只能找到LINUX,不能引导WIN2000
  • linux c下利用srand和rand函数生成随机字符串
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • Linux c++虚函数(virtual function)简单用法示例代码
  • 我们网站的服务器从windows2000迁往linux,ASP程序继续使用,可是我连LINUX的皮毛都不了解,大家告诉我LINUX下怎么建网站??
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • 中文Linux与西文Linus分别哪一个版是权威?I认为是:中科软的白旗Linux与西文的绿帽子Linux!大家的看法呢?
  • Linux下chmod命令详细介绍及用法举例
  • 我重装了winme,却进不了Linux了,而我现在又没有Linux光盘,也没有Linux启动盘,还有没有办法?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3