网络传输中,文本文件与二进制文件

今天写Walker的网络传输, 在传输文件时, 出现一点问题。

1.如果传输文本文件, 只要一个字节一个字节地对应传送过去即可。

2.如果传输二进制文件,也只要一个字节一个字节传送过去就可以。。

读写文件,都是以字节流的形式。最后用vim打开时,都是一个字节 转换 成一个字符出来给人看。


这次出现的问题是这样的,要实现以下一个功能:

传输一行数据,数据格式是 <string int> 来表示一个 ip地址,与其出现的次数。如  192.168..1.1  2,表示这个IP地址出现了两次。在网络中,有下面有几种传输方式:

1(有问题).先传一个string, ( strIp.size() bytes),一个空格(1byte), int(4bytes), 换行符(1bytes).      文件能传,接收文件的时候,能以字符全部接收过来,但是因为不知道其格式,用文本文件来显示的话, 字符串可以正常显示, 但是4个字节的int, 显示出来却不对了。

解决方法:

1(推荐,)在发送的时候,将int也转换成字符来发送(sprintf)~~ , 接收到的文件直接就能看了, 要用时,再转成整型.(atoi)

2  (不推荐) 自定义协议, 传送文件的时候,额外定义协议, 比如  len string 4 int, 表示先读个len,然后读len个字节存为字符串,再读个len=4,再读4个字节存为int.这种方法比较不推荐,因为我接收文件的方式已经写好,是TCP无边界,一次读4K的了~~ 去改无限麻烦。


总结:网络传输中的文件,要把每个数据都看成字符,而不要还有整数之类的看法。

把上面的问题,全部看成字符,收到所有文件后,要进行额外处理,再去慢慢转换。 

注: 二进制文件 与 文本文件的区别, 编码不同。如果 int n = 10; 文本文件只要2个字节,二进制文件则是 sizeof(int) = 4个字节。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值