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

socket传送文件,丢失数据???

    来源: 互联网  发布时间:2016-08-15

    本文导语:  我写的socket程序,实现两主机间文件的传输,但不论是传输文本文件还是二进制文件在文件的最后都要丢失一两k的数据 这是服务接口: [code=C/C++][/#include"unp.h" extern char current_path[100]; int cmd_pic(int sock,int sockmsg) { p...

我写的socket程序,实现两主机间文件的传输,但不论是传输文本文件还是二进制文件在文件的最后都要丢失一两k的数据
这是服务接口:
[code=C/C++][/#include"unp.h"
extern char current_path[100];

int cmd_pic(int sock,int sockmsg)
{
printf("1n");//debug
FILE *fd;
char buff[MAXSIZE];
size_t read_bytes;
char file_name[100];

bzero(buff,MAXSIZE);
bzero(file_name,100);

if( recv(sockmsg,file_name,100,0) == -1 )
err_sys("recv error");
strcat(current_path,"/");
strcat(current_path,file_name);
printf("debug:%sn",current_path);//debug

if(( fd = fopen(current_path,"rb")) == NULL )
err_sys("fopen error");
while(( read_bytes = fread(buff,sizeof(char),MAXSIZE/sizeof(char),fd)) != 0 )
{
if(send(sock,buff,read_bytes,0) == -1 )
err_sys("send error");
bzero(buff,MAXSIZE);
}
if(ferror(fd))
{
printf("fread errorn");
exit(1);
}
return(0);
}]
这是客服接口:



[code=C/C++][/#include"unp.h"

int client_cmd_pic(int sock,int sockmsg)
{
char file_name[100];
char buff[1024];
ssize_t n;
FILE *fd;

bzero(file_name,100);
bzero(buff,1024);

if( send(sockmsg,"get",3,0) == -1 )
err_sys("cmd send error");
printf("input the file namen");
scanf("%s",file_name);
if( send(sockmsg,file_name,strlen(file_name),0) == -1 )
err_sys("file_name send error");
if(chdir("/home/hexiaogang/Desktop") == -1 )
err_sys("chdir error");

if(( fd = fopen("kk","ab")) == NULL )
{
printf("fopen errorn");
exit(1);
}
while(( n = recv(sock,buff,1024,0)) != 0 )
{
if(n == -1 && errno == EINTR )
continue;
if( n == -1 )
err_sys("recv error");
fwrite(buff,sizeof(char),n/sizeof(char),fd);
}
fflush(fd);
fclose(fd);
return(0);
}
]

|
噢,那就用setsockopt设置SO_LINGER选项然后close掉套接口,具体可以参看UNP第七章

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何用socket一次传输多个文件,如何确定文件一个文件结束
  • 关于文件操作和Socket网络编程!
  • Linux下怎么用socket接收zip文件流?怎么把zip文件读成流?
  • liunx下面包含socket头文件了,close时提示尚未声明???
  • 初来者,试问winsock改造成gcc socket需要什么头文件?
  • socket程序中,查看error需要什么头文件?
  • socket实现多文件并发传输,求助多线程实现问题?
  • [高分相送200] 谁有linux下socket编写的发送文件源代码?(解决另开贴)
  • 内核源文件/net/socket.c中调用其他模块的函数,该如何实现
  • socket传输二进制文件输出是不是要用DataOutputStream?
  • socket编程为什么.cpp文件编辑通不过
  • 请教linux下c用下载FTP站点中文件的socket程序思路
  • 请问一下,有谁知道linux源代码中socket(int domain, int type, int protocol);函数的定义是在哪个文件中啊?小弟我找了很久,都没找到,谢谢哈。
  • hpunix gcc 包含socket.h 文件报错
  • 如何利用socket传文件(不同格式的)?高分求救!!---在线等待
  • 一个简单的SOCKET服务端程序,生成执行文件的出错!
  • 包含了头文件sys/socket.h等,编译链接的时候却报错,是什么问题呢
  • gcc编译socket小程序成功,但生成的文件却无法执行
  • 高分求救:SOL_SOCKET,SO_RCVTIMO,SO_SNDTIMEO,IPPOTO_TCP,TCP_NODELAY这些是在哪个头文件定义的呢?
  • close掉socket后,在accept了1024次后,出现打开文件最大限制1024的问题
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍


  • 站内导航:


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

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

    浙ICP备11055608号-3