socket 读取文件不完整

2018-08-15 22:12:01 +08:00
 implements

我把一个本地文件按字节读然后通过 socket 输出流发送出去,再通过输入流读回来,再把字节拼回个文件。内网没问题都能读完整,但是我通过端口映射,数据通过外国的服务器返回来的数据就丢失了一些,小文件还没问题但是 6m 的文件接收到的就只有 5m 了,麻烦大牛帮我解决一下

1649 次点击
所在节点    问与答
13 条回复
HelloAmadeus
2018-08-15 22:17:16 +08:00
socket.recv 不一定会你传入的长度,这种情况考虑了吗?
HelloAmadeus
2018-08-15 22:26:28 +08:00
传文件
ho121
2018-08-15 22:35:00 +08:00
所以才有了 tcp
implements
2018-08-15 22:56:42 +08:00
@HelloAmadeus 不用考虑文件长度啊,只是把文件按字节读出来,然后把所有字节按顺序拼接起来就行了,
implements
2018-08-15 22:57:30 +08:00
@ho121 socket 不是基于 tcp 的么?
HelloAmadeus
2018-08-15 23:42:24 +08:00
@implements 手机打字,点错就发出去了。你贴一下代码吧,发文件的话,SCP 不是更方便吗?
changnet
2018-08-16 00:44:00 +08:00
肯定你代码逻辑有问题,比如发出去 n 字节实际只能发 m 字节但你没处理。

直接给发送接收代码吧,这功能的代码没几行
msg7086
2018-08-16 00:49:51 +08:00
你说的 socket 是啥东西?
implements
2018-08-16 01:04:32 +08:00
@changnet 应该不是能读取并全部发送,内网能完整的接收,逻辑有问题的话应该是不能用的
lolizeppelin
2018-08-16 01:07:00 +08:00
贴代码
CEBBCAT
2018-08-16 06:30:58 +08:00
……说啥好?咋就那么墨迹呢?内网丢包少,地球上转了一圈有所丢包是可以理解的,楼上要代码就是要看你缓冲区处理好了没有,是不是选了 UDP
ho121
2018-08-16 08:25:42 +08:00
@implements 你的逻辑是默认了你所谓的 socket 是 100%可靠的,内网环境可以这么理解,外网环境复杂,就不是这样了,而且你需要考虑断连的问题,你以为下载工具都这么好做
changnet
2018-08-16 13:00:29 +08:00
@implements 内网能收完整可能是内网环境好。发几行代码看看不行么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/480189

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX