流程

winapi、Linux中利用socket进行tcp通信的流程:

服务端:创建套接字、绑定、监听、接受连接、接收数据、发送数据
客户端:创建套接字、连接服务器、发送数据、接收数据

qt中tcp通信流程:

服务器:
1.创建QTcpServer对象(创建套接字、绑定、监听、接受连接)
2.启动服务器(监听)调用成员方法listen(QHostAddress::Any,端口号)
3.当有客户端链接时候会发送newConnection信号,触发槽函数接受链接,在槽函数中创建一个与客户端通信的套接字QTcpSocket(接收数据、发送数据)。
4.QTcpsocket发送数据用成员方法write,
5.读数据当客户端有数据来,QTcpSocket对象就会发送readyRead信号,关联槽函数读取数据
客户端:
1.创建QTcpSocket对象
2.调用QTcpSocket方法链接服务器connectToHost(QHostAddress(“ip”),端口号)
3.QTcpsocket发送数据用成员方法write,
4.读数据当对方有数据来,QTcpSocket对象就会发送readyRead信号,关联槽函数读取数据

qt实现tcp通信主要用到QTcpServer 与 QTcpSocket 两个类实现,且客户端不需要使用QTcpServer ,当需注意QTcpSocket 不是线程安全的,不可以如同winapi socket那样进行跨线程操作,这里socket接收发送数据一般单独在一个线程中进行,需要跨线程传送的数据通过信号槽进行传递。这两个类存在于qt单独的network模块,需要在.pro文件中添加上这个模块,不然编译会报错。

https://zhuanlan.zhihu.com/p/113103834#:~:text=%E5%9C%A8Qt%E4%B8%AD%EF%BC%8C%E8%A6%81%E4%BD%BF%E7%94%A8TCP%E9%80%9A%E4%BF%A1%E5%BF%85%E9%A1%BB%E8%A6%81%E5%9C%A8.pro%20%E6%96%87%E4%BB%B6%E4%B8%AD%E5%8A%A0%E5%85%A5%20network%20%E6%A8%A1%E5%9D%97%E3%80%82,%E5%9C%A8%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%83%A8%E5%88%86%EF%BC%8C%E4%B8%BB%E8%A6%81%E6%98%AF%E7%94%A8%E5%88%B0%20QTcpsocket%20%E7%B1%BB%E5%88%9B%E5%BB%BA%20socket%20%E5%AF%B9%E8%B1%A1%E5%8E%BB%E8%BF%9E%E6%8E%A5%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF%E5%8F%A3%EF%BC%8C%E8%BF%9E%E6%8E%A5%E6%88%90%E5%8A%9F%E5%90%8E%E5%8D%B3%E5%8F%AF%E6%AD%A3%E5%B8%B8%E4%BC%A0%E8%BE%93%E6%95%B0%E6%8D%AE%E3%80%82