java中的网络编程,传输时的UDP协议和TCP协议,可以理解为类似QQ发送文件的离线传输和在线传输吗?
离线传输不需要对方是否确认接收,但是在线传输必须对方确认接收后才能建立连接,传送文件。这种比喻是否恰当?
java中的网络编程,传输时的UDP协议和TCP协议,可以理解为类似QQ发送文件的离线传输和在线传输吗?
离线传输不需要对方是否确认接收,但是在线传输必须对方确认接收后才能建立连接,传送文件。这种比喻是否恰当?
实话说你理解的不是一般的偏,好好补课了要
QQ的离线传输实际上是你把文件传输到了服务器上,然后下次朋友上线时服务器另外通知到他某某人给你传了一个文件,他下载的过程是从服务器获取文件,这与文件是通过TCP还是UDP传输的没有任何关系!(当然了,QQ的离线文件的这个功能的实现是通过TCP做的)
UDP和TCP作为两种传输协议,他们的最大区别是UDP是无状态的,它对于传输结果不做任何保证。而TCP有,TCP通过维护一个虚拟的连接来帮你维持传输的可靠性。
用通俗的语言来描述说,如果存在TCP和UDP的两家快递公司
你用TCP给你的朋友发了一个快递,每个快递都有单号,朋友会告诉你,这个快递单号XXX收到了,如果你的朋友没有收到这个快递(朋友没有告诉你),快递公司会帮你重新发送这个快递。
如果你用UDP给你的朋友发快递,没有单号,朋友也不会给你任何反馈,你只管发他只管收,但也因为如此,效率高了很多。
这个类比并不完全准确,仅帮助理解。
最后提一句,此问题与java或者任意语言都无关,它是网络通信的范畴
这个比喻确实不太恰当,但是我觉得楼上的回答都偏了,你们好像没有理解题主的意思。
之所以说楼主的比喻不太恰当,不是因为离线传输和在线传输是UDP还是TCP实现的,而是因为过程不一样:TCP的确认发生在传输之后,但你的比喻中,在线传输的确认发生在传输之前
,这是它们不一样的关键地方。倒是离线传输和UDP有点像:我只管发,朋友什么时候接收、有没有接收那是他的事情,我发上去了就可以不用管了
。
比喻应该是拿这个比喻。对讲机
UDP:你拿起来按着讲话不放:“ 附近有人吗,我掉沟里了,来个人救我啊啊!!!!”
这个情况下,你发没发出去你不知道,有没有人收到你也不知道,收到的人听没听清你也不知道。
TCP:军队之间对讲: A:“01,听到请回答。01,听到请回答”, B: “01收到,请讲”
A:“命令01去XXX集合,重复”, B:“命令01 去XXX集合”,A:“错误,命令01去XXX集合,重复” B:“命令01去XXX集合”, A:“正确 over”, B:“over”
这个情况下,每个信息都要求确认是不是正确的,有没有遗漏,有遗漏或者错误将会重新再发送一遍。
15 回答8.1k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
不太恰当吧......又存不住