客户端从socket 读取文件内容,如何知道什么时候读到文件的结尾? 以及接受到读到的文件是否完整?
测试代码发现有时候,接收到的文件是原文件的两倍大小,怎么回事?
客户端从socket 读取文件内容,如何知道什么时候读到文件的结尾? 以及接受到读到的文件是否完整?
测试代码发现有时候,接收到的文件是原文件的两倍大小,怎么回事?
客户端从socket 读取文件内容,如何知道什么时候读到文件的结尾? 以及接受到读到的文件是否完整?
无法知道。或者说,只有“你”才知道。
你能知道的信息,是收到了多少字节,收到的内容是什么,至于是否“结尾”,是否“结束”,那是你逻辑上的事。
而传输协议如何设计,可以简单去了解一下 HTTP 就明白了。
测试代码发现有时候,接收到的文件是原文件的两倍大小,怎么回事?
你代码有问题。
2.用到什么技术呢?有限状态机。那么有的同学可能不是很清楚有限状态机是个什么东西,不要紧,是个很简单东西。以这个问题举例,看完就知道了。
看你的Socket是什么类型的socket了,如果是文件的Socket,在Java里,会在文件读完的时候返回 -1, 而一般 TCP Socket就需要会通过上层协议来保证,TCP Socket一般会有复用,所以基本上没有发完这一说,当然你可以选择在发送端发送完文件内容以后主动关闭Socket来表示数据传输完毕,但是这种情况你就没有办法区分出是网络抖动还是发送端真的发完了。
你也可以自己弄一个最简单的协议,在发送真正的文件之前先发送一些别的信息,比如文件长度,文件MD5之类的,当你读到头里指定的字节数之后就可以直接认为已经读完了,比如