免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7715 | 回复: 24
打印 上一主题 下一主题

用socket传文件,另一端接收后,文件打不开 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-17 16:58 |只看该作者 |倒序浏览
5可用积分
用如下的struct来传送
struct send_data{
    int id;
    size_t size;
    char sdata[MAXSIZE];
}__attribute__ ((__packed__));

程序输出如下,可以看到,包顺序没有错, 每次发送数据大小和接收数据大小也一致
[client:]*************begin upload****************
[client:]rlen:  2048, sdata len:  2048, id:    0
[client:]rlen:  2048, sdata len:  2048, id:    1
[client:]rlen:  2048, sdata len:  2048, id:    2
[client:]rlen:  2048, sdata len:  2048, id:    3
[client:]rlen:  2048, sdata len:  2048, id:    4
[client:]rlen:  2048, sdata len:  2048, id:    5
[client:]rlen:  2048, sdata len:  2048, id:    6
[client:]rlen:  2048, sdata len:  2048, id:    7
[client:]rlen:  2048, sdata len:  2048, id:    8
[client:]rlen:  2048, sdata len:  2048, id:    9
[client:]rlen:  2048, sdata len:  2048, id:   10
[client:]rlen:  2048, sdata len:  2048, id:   11
[client:]rlen:  2048, sdata len:  2048, id:   12
[client:]rlen:   984,  sdata len:   984,  id:   13
[client:]************* end upload ****************

{server:}^^^^^^^^^^^^begin recv^^^^^^^^^^^^
{server:}sdata len: 2048, id:     0, write len:  2048
{server:}2056, sdata len: 2048, id:     1, write len:  2048
{server:}sdata len: 2048, id:     2, write len:  2048
{server:}sdata len: 2048, id:     3, write len:  2048
{server:}sdata len: 2048, id:     4, write len:  2048
{server:}sdata len: 2048, id:     5, write len:  2048
{server:}sdata len: 2048, id:     6, write len:  2048
{server:}sdata len: 2048, id:     7, write len:  2048
{server:}sdata len: 2048, id:     8, write len:  2048
{server:}sdata len: 2048, id:     9, write len:  2048
{server:}sdata len: 2048, id:    10, write len:  2048
{server:}sdata len: 2048, id:    11, write len:  2048
{server:}sdata len: 2048, id:    12, write len:  2048
{server:}sdata len:  984,  id:    13, write len:   984
{server:}^^^^^^^^^^^end recv^^^^^^^^^^^^^^^

发送imgload.jpg, 接收存为文件 temp
最后 ls -l 可以看到两个文件大小是一样的 27608字节

-rw-r--r-- 1 silviasun users  27608 2008-09-17 11:10 imgload.jpg
-rw-r--r-- 1 silviasun users  27608 2008-09-17 16:49 temp

可是我把temp文件下载到windows系统下后打开图片,却显示"没有预览"
为何呢...........

论坛徽章:
0
2 [报告]
发表于 2008-09-17 17:07 |只看该作者
先diff 看看文件是否一致.

论坛徽章:
0
3 [报告]
发表于 2008-09-17 17:16 |只看该作者
原帖由 随风缘 于 2008-9-17 17:07 发表
先diff 看看文件是否一致.


diff不是只能用于较相似的文本文件么
这些文件不可以呀......

论坛徽章:
0
4 [报告]
发表于 2008-09-17 17:18 |只看该作者
md5sum
sha1sum

论坛徽章:
0
5 [报告]
发表于 2008-09-17 17:22 |只看该作者
确认一下文件读写操作的时候是否是用二进制方式打开的文件?

然后用16进制编辑器看看两者不同的地方有何规律

论坛徽章:
0
6 [报告]
发表于 2008-09-17 17:24 |只看该作者
不一样的结果
silviasun@JG38:~/upload$ md5sum imgload.jpg temp
aea55f05a832960945980cc81ce357e5  imgload.jpg
6baeb1864ec4758fb7385b534f380825  temp

想想都觉得两个文件会不一致.
可是我想知道, 导致这样的原因是什么呢
怎么才能正确接收到文件

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2008-09-17 17:44 |只看该作者
fopen("wb") or open ..   

have a try

[ 本帖最后由 cookis 于 2008-9-17 17:45 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-09-17 17:46 |只看该作者
看代码,跟踪调试

论坛徽章:
0
9 [报告]
发表于 2008-09-17 17:50 |只看该作者
我是用open的
open打开后是字节流形式, 2进制文件也没有关系吧
厄.... 这种不知道应该怎么追踪调试呢.....

论坛徽章:
0
10 [报告]
发表于 2008-09-17 18:22 |只看该作者
原帖由 carol_sun 于 2008-9-17 17:50 发表
我是用open的
open打开后是字节流形式, 2进制文件也没有关系吧
厄.... 这种不知道应该怎么追踪调试呢.....



第一建议你用2进制比较工具,比如beyondCompare.
第二如果你没有第一的工具,那就用16进制把你发送,接收的字符打印出来.比较不同.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP