.pro 文件中加入:QT+=network
在Qt中实现TCP/IP服务器端通信的流程:
1.创建监听套接字,QTcpServer
2.将监听套接字设置为监听模式, listen
4.接收或者向客户端发送数据
5.接收数据:使用read()或者readAll()函数
6.发送数据:使用write()函数
监听套接字和通信套接字的区别:
在服务端包含两种套接字QTcpServer,QTcpSocket. QTcpServer用于listen()监听模式,监听哪个IP,从哪个端口接入。QTcpSocket用于两者之间的真正通信,当两者完成连接后,各个都拥有一个QTcpSocket,如:sock1,sock1,那么这两个通信套接字等同于各自的手机号码,用于通信使用。
客户端通信流程:
1.创建套接字
2.连接服务器,可以使用QTcpSocket类的connectToHost()函数来连接服务器。
3.向服务器发送或者接受数据
如图:

解析:当服务端处于监听模式时(listen),客户端通过connectToHost请求连接,此时服务端就是触发信号newConnection(系统给出,非自拟),调用对应的槽函数(可自拟,或直接使用Lambda表达式)。服务端连通后,客户端就会立即触发信号connected.说明两者之间已完成连接,彼此可以利用write发出信息,利用read,readAll接受信息。
服务器
TcpSever.h
#ifndef TCPSEVER_H
#define TCPSEVER_H
#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
public:
private slots:
private:
};
#endif // TCPSEVER_H
TcpSever.cpp
#include "TcpSever.h"
#include "ui_widget.h"
#include <QTime>
#include <QDebug>
Widget::Widget(QWidget *parent) :
{
}
Widget::~Widget()
{
}
void Widget::on_pushButton_clicked()
{
}
void Widget::on_pushButton_2_clicked()
{
}
同一程序添加两个窗口,且有设计器。新建一个文件,但不是C++类文件,而是QT且带有界面类的,最后在main中使用show()直接显示。如下图:

客户端
tcpclient.h
#ifndef TCPCLIENT_H
#define TCPCLIENT_H
#include <QWidget>
#include <QTcpSocket>
#include <QHostAddress>
namespace Ui {
class TcpClient;
}
class TcpClient : public QWidget
{
public:
private slots:
private:
};
#endif // TCPCLIENT_H
tcpclient.cpp
#include "tcpclient.h"
#include "ui_tcpclient.h"
#include <QDebug>
#include <QTime>
TcpClient::TcpClient(QWidget *parent) :
{
}
TcpClient::~TcpClient()
{
}
void TcpClient::on_connect_clicked()
{
}
void TcpClient::on_send_clicked()
{
}
void TcpClient::on_close_clicked()
{
}
main.cpp
#include "TcpSever.h"
#include <QApplication>
#include "tcpclient.h"
int main(int argc, char *argv[])
{
}
程序结果图:

原文:https://www.cnblogs.com/gd-luojialin/p/9215782.html