网络编程中的socket中关于TCP下的文件传输:EOF问题
来源:互联网 发布:chrome 执行js代码 编辑:程序博客网 时间:2024/06/18 08:07
点击打开链接
文件的传输中:文件中并不包括EOF(-1)这个结束标志;恰恰它是文件FILE这个类型的下的一个结束状态,可以通过feof(),ferror()来判断出来。
所以在socket传文件中,在接收方不可能接收到-1,且ASCII码中也都是大于等于0的,不要渴望用strcmp()比较出来。
文件传输标志:1.可以通过提前发送长度。2.加上报头。3.自己约定一个结束标志(这样的面就窄了下来,自己用是可以的)
如下是我的自己约定的标志符号的方法,
(note:传输前应该采用规定好传输缓冲接收窗口)
sever端的代码:
printf("input the file you want to transfer\n");
scanf_s("%s", temp, DEFAULT_BUFLEN);FILE * fp;errno_t err;err = fopen_s(&fp, temp, "rb"); // binary mode for readif (err != 0){printf("open file %s failed\n", temp);return -1;}memset(temp, 0, DEFAULT_BUFLEN);int length = 0;while ((length = fread(temp, sizeof(char), DEFAULT_BUFLEN, fp)) > 0){if (send(ClientSocket, temp, length, 0) < 0){printf("Send File: %s Failed\n");break;}memset(temp, 0, DEFAULT_BUFLEN);}send(ClientSocket, "eof", (int)strlen("oef"), 0);fclose(fp);printf("server file transfer success\n");
//create fileFILE * fp;errno_t err;//receive data from serverprintf("input the received file position:\n");scanf_s("%s", file_name, DEFAULT_BUFLEN);err = fopen_s(&fp, file_name, "wb+"); // binary mode for readif (err != 0){printf("open file %s failed\n", file_name);return -1;}memset(temp, 0, DEFAULT_BUFLEN);int length = 0;while ((length = recv(ConnectSocket, temp, DEFAULT_BUFLEN, 0)) > 0){if (strcmp(temp, "eof") == 0) {break;}if (fwrite(temp, sizeof(char), length, fp) < length){printf("File: %s Write Failed\n", file_name);break;}memset(temp, 0, DEFAULT_BUFLEN);}printf("transmission done\n");fclose(fp);
以上思路可以进行任何文件的传输,因为是以二进制文件进行操作的,消除了文件格式的界限。
阅读全文
0 0
- 网络编程中的socket中关于TCP下的文件传输:EOF问题
- 网络编程--TCP下的Socket
- linux下的TCP/IP socket 文件传输
- linux下的TCP/IP socket 文件传输
- Linux下的TCP/IP socket 文件传输
- Linux下的TCP/IP socket 文件传输
- Linux网络编程之Tcp/Udp socket文件传输示例
- 基于socket网络编程的文件传输程序
- socket网络编程中的数据传输的问题
- Linux网络编程:socket文件传输
- [转]Linux下Socket网络编程,文件传输,数据传输的C语言例子
- Linux下Socket网络编程,文件传输,数据传输的C语言例子
- Linux下Socket网络编程,文件传输,数据传输的C语言例子
- Linux下Socket网络编程,文件传输,数据传输的C语言例子
- Linux下Socket网络编程,文件传输,数据传输的C语言例子
- Linux下Socket网络编程,文件传输,数据传输的C语言例子
- [转]Linux下Socket网络编程,文件传输,数据传输的C语言例子
- Linux下Socket网络编程,文件传输,数据传输的C语言例子
- MVP+RxJava+Reftryfit+多线程断点续传+ijkplayer视频播放
- 十 项目2
- 第十三周项目1
- Nginx配置upstream实现负载均衡
- 加入购物车
- 网络编程中的socket中关于TCP下的文件传输:EOF问题
- 第十一周项目三
- C++和C#相互调用COM组件的方法简介
- 解决无法获取app动态空件的属性
- HTML——给图片<img>标签加上超链接
- [C++]轻量级数据库Sqlite3基础使用
- 第十二周 【项目2
- STL的reserve和resize
- 第十二周项目1Prim算法的验证