【C++/Socket】从Windows向Linux传输文件时有细微的数据丢失?该如何解决
【C++/Socket】从Windows向Linux传输文件时有细微的数据丢失?
最近写了一个C/S模式的小程序用来传本地Windows下的文件到linux服务器上,结果发现传上去的文件总是少那么一些字节,导致文件损坏无法使用。在windows使用 Winsock2.h 传数据到linux标准的 sys/socket.h 通信有什么需要注意的吗?
主要DATA发送代码/Windows:
主要DATA接受代码/Linux:
------解决方案--------------------
一般都是先send文件的大小字节数,然后send文件数据。接收端先接收得到需要recv后续数据的大小,然后recv直到接收完毕~
------解决方案--------------------
代码不够全,无法帮你调试
------解决方案--------------------
------解决方案--------------------
不应该的。socket不管操作系统
unix/linux和dos/windows有一点区别是文本文件的换行,确认下linux下也是用b方式打开文件
------解决方案--------------------
------解决方案--------------------
http://topic.****.net/u/20111112/12/80a26383-219a-4503-8cb2-3e24f226a733.html
------解决方案--------------------
主要是你发送和接收时,处理的数据数组等是否一致.
最近写了一个C/S模式的小程序用来传本地Windows下的文件到linux服务器上,结果发现传上去的文件总是少那么一些字节,导致文件损坏无法使用。在windows使用 Winsock2.h 传数据到linux标准的 sys/socket.h 通信有什么需要注意的吗?
主要DATA发送代码/Windows:
- C/C++ code
pFile = fopen ("c:\\BT.rar" , "rb"); if (pFile == NULL) perror ("Error opening file"); else { size_t ret; while((ret = fread(&mystring,1 ,1024, pFile) ) > 0) { send(sockClient,(char *) &mystring,ret,0); memset(&mystring,0,1024); } fclose (pFile); }
主要DATA接受代码/Linux:
- C/C++ code
size_t ret = 0; while((recvMsgSize = sock->recv(echoBuffer, RCVBUFSIZE)) > 0) { ret = fwrite(echoBuffer,1,recvMsgSize,pFile); memset(echoBuffer,0,RCVBUFSIZE); } printf("file transfer completed!\n");
------解决方案--------------------
一般都是先send文件的大小字节数,然后send文件数据。接收端先接收得到需要recv后续数据的大小,然后recv直到接收完毕~
------解决方案--------------------
代码不够全,无法帮你调试
------解决方案--------------------
------解决方案--------------------
不应该的。socket不管操作系统
unix/linux和dos/windows有一点区别是文本文件的换行,确认下linux下也是用b方式打开文件
------解决方案--------------------
------解决方案--------------------
http://topic.****.net/u/20111112/12/80a26383-219a-4503-8cb2-3e24f226a733.html
------解决方案--------------------
主要是你发送和接收时,处理的数据数组等是否一致.