看不懂的socket,数据是怎么从一台电脑传到另一台电脑的?

酷python 2015-10-16 10:10:10
先说我对socket数据传输的理解
1、当我们调用send函数时,数据并不是真实的发送到了另一段,而是写入到发送缓冲区,socket协议自己会决定如何把消息发送出去
2、当我们调用recv函数时,并不是从另一台电脑那接收数据,而是从接收缓冲区内读取已经到达的数据
3、一般来说,发送缓冲区和接收缓冲区是64K大小

基于以上的知识,我最近观察到的一个现象让我无法理解,事情是这样的:
1、 我用node.js写了一个http服务器,用于提供文件的下载,部署到我的A电脑上
2、 我在B电脑上部署了一个下载文件的程序进行文件的下载操作,两台电脑在同一个局域网内
3、 当B电脑上的程序发起一个50M大小的文件下载请求后,http服务器提供下载服务,但是这个时候我发现http服务端的程序已经运行结束了,所谓运行结束是指res.end()已经被执行了,这意味着服务端的工作已经结束了,可是B电脑上的下载程序却还在缓慢的运行着。

下面事情里这三点和上面对socket数据传输的三点理解是冲突的。http是基于tcp,也就是最底层是socket,一端把50M数据都发送完了,而另一段却还接收完,服务器那边完成下载服务时,B电脑上才接收了几个M的数据。可发送缓冲区和接收缓冲区加在一起也就128K,那么那至少40M的数据哪里去了?
难道都在传输的路上么?
请大神指点
...全文
205 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
向云 2015-10-18
  • 打赏
  • 举报
回复
你最好把主要的发送和下载代码贴出来,有可能是代码出了问题

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧