流程
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文件中添加上这个模块,不然编译会报错。