之前看了《apue》,但是一直没做什么东西,很多概念性的东西了解之后不实践很容易忘掉。所以蹦出写一个聊天室的想法。当然Qt内部有关于Udp和Tcp相关类的封装,任何底层的函数都可以通过直接调用类里的方法完成。我也是参照了《Qt学习之路》这一系列文章做下去的。
先看一下Udp和Tcp什么区别:
Udp是无连接,什么是无连接呢?就是说两台机器如果通信的话不需要事先经过一些约定(连接),可以直接传数据;而有连接的就是说要通信的话必须先连接起来才能传输数据。相比来说:Udp速度快,容错差,安全性低;Tdp速度慢(三次握手),容错高(可以检错重发),安全性高。
不同机器到底是怎么通信的?
这个问题一直是我读网络编程书之前的困惑,网上大部分推荐看《计算机网络》,《Tcp/Ip协议》这类的书。但是那个学习成本太高(但并不意味着不值得看,相反非常值得看),但是对于入门来说,大致了解框架远比抠细节重要。下面我就大致说说两台机器到底如何通信的:
A和B两台机器上面都运行了程序NET,现在A打了一段字(也可能是其他类型的数据)到NET的输入框里,NET通过系统API将这些数据依次往硬件上传(中间依次经历了传输层,网络层,数据链路层),最后到物理层,这之间的层数具体干什么的你不用管,它们的工作其实就是在你的数据开头(或者结尾)加上一些额外信息,这样物理层就能通过这些额外信息知道将你的数据传到哪里去,传多少。等等。这样数据经过光纤,电缆传到B之后,B以相反的顺序依次通过上面说的层将数据送到B的NET程序上显示出来,此时B之间的那些层的功能就是将那些额外信息给去掉,把A的数据给拆解出来送到NET上去。这样就完成了一次数据通信,当然真正的通信肯定比这个更复杂,细节更多,但是作为初学者应该大致了解这个过程就行了。
Qt Udp实现聊天室:
发送端:
QUdpSocket *udpSocket = new QUdp