java的UDP和TCP协议。

墨染白筝
  • 147

java中的网络编程,传输时的UDP协议和TCP协议,可以理解为类似QQ发送文件的离线传输和在线传输吗?
离线传输不需要对方是否确认接收,但是在线传输必须对方确认接收后才能建立连接,传送文件。这种比喻是否恰当?

回复
阅读 3.9k
6 个回答

不太恰当吧......又存不住

实话说你理解的不是一般的偏,好好补课了要

QQ的离线传输实际上是你把文件传输到了服务器上,然后下次朋友上线时服务器另外通知到他某某人给你传了一个文件,他下载的过程是从服务器获取文件,这与文件是通过TCP还是UDP传输的没有任何关系!(当然了,QQ的离线文件的这个功能的实现是通过TCP做的)

UDP和TCP作为两种传输协议,他们的最大区别是UDP是无状态的,它对于传输结果不做任何保证。而TCP有,TCP通过维护一个虚拟的连接来帮你维持传输的可靠性。
用通俗的语言来描述说,如果存在TCP和UDP的两家快递公司
你用TCP给你的朋友发了一个快递,每个快递都有单号,朋友会告诉你,这个快递单号XXX收到了,如果你的朋友没有收到这个快递(朋友没有告诉你),快递公司会帮你重新发送这个快递。
如果你用UDP给你的朋友发快递,没有单号,朋友也不会给你任何反馈,你只管发他只管收,但也因为如此,效率高了很多。
这个类比并不完全准确,仅帮助理解。

最后提一句,此问题与java或者任意语言都无关,它是网络通信的范畴

这个比喻确实不太恰当,但是我觉得楼上的回答都偏了,你们好像没有理解题主的意思。

之所以说楼主的比喻不太恰当,不是因为离线传输和在线传输是UDP还是TCP实现的,而是因为过程不一样:TCP的确认发生在传输之后,但你的比喻中,在线传输的确认发生在传输之前,这是它们不一样的关键地方。倒是离线传输和UDP有点像:我只管发,朋友什么时候接收、有没有接收那是他的事情,我发上去了就可以不用管了

QQ的通讯用的是封装后的udp协议,据说很好地解决了丢包问题。文件传输等用的是tcp

比喻应该是拿这个比喻。对讲机

UDP:你拿起来按着讲话不放:“ 附近有人吗,我掉沟里了,来个人救我啊啊!!!!”

这个情况下,你发没发出去你不知道,有没有人收到你也不知道,收到的人听没听清你也不知道。

TCP:军队之间对讲: A:“01,听到请回答。01,听到请回答”, B: “01收到,请讲”
A:“命令01去XXX集合,重复”, B:“命令01 去XXX集合”,A:“错误,命令01去XXX集合,重复” B:“命令01去XXX集合”, A:“正确 over”, B:“over”

这个情况下,每个信息都要求确认是不是正确的,有没有遗漏,有遗漏或者错误将会重新再发送一遍。

大哥,TCP是先建立连接才传输,你连信道都没有,咋通信。TCP是管发又管收,UDP是只管发不管收,突发场景的比较适合UDP,因为不需要建立连接,而TCP是需要保证正确性的。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏