Qt中的Socket通信要在.pro工程文件中添加:
QT += network
要用到两个Qt的类:QTcpServer和QTcpSocket
1、新建QTcpServer对象
2、设置监听的客户端端口
3、关联连接信号与槽(客户端连接服务器时会触发信号QTcpServer::newConnection())
4、在槽函数中,用一个QTcpSocket对象接受客户端访问(nextPendingConnection())
5、关联读取信号与槽(当socket接收缓冲区有新数据到来时,会发出readRead()信号)
6、在槽函数中,通过read()函数获取数据
7、通过write( )函数向客户端发送数据
8、取消侦听
//1、新建QTcpServer对象
//监听套接字,指定父对象,让其自动回收空间
tcpServer = new QTcpServer(this);
//2、设置监听的客户端端口
tcpServer->listen(QHostAddress::Any, (int)port)
//3、关联连接信号与槽
connect(tcpServer, &QTcpServer::newConnection, this, &MainWindow::server_New_Connect);
void server_New_Connect()
{
//4、在槽函数中,用一个QTcpSocket对象接受客户端访问,取出建立好连接的套接字
socket = tcpServer->nextPendingConnection();
//5、连接QTcpSocket的信号槽,以读取新数据
connect(socket, &QTcpSocket::readyRead, this, &MainWindow::socket_Read_Data);
connect(socket, &QTcpSocket::disconnected, this, &MainWindow::socket_Disconnected);
}
//6、在槽函数中,通过read()函数获取数据
void socket_Read_Data()
{
//读取缓存区的数据(只要有,随时去取)
char buffer[1024] = {0};
socket->read(buffer, 1024);
if( strlen(buffer) > 0)
{
QString showNsg = buffer;
ui->m_recvDataTextEdit->append(showNsg);
}
}
//7、通过write( )函数向客户端发送数据
char sendMsgChar[1024];
socket->write(sendMsgChar, strlen(sendMsgChar));
//8、取消侦听
tcpServer->close();
客户端的代码比服务器稍简单,使用QTcpSocket
1、创建QTcpSocket套接字对象
2、连接服务器(connectToHost(IP, port))
3、使用write( )函数向服务器发送数据
4、关联读取信号与槽(当socket接收缓冲区有新数据到来时,会发出readRead()信号)
5、断开与服务器的连接(关于close()和disconnectFromHost()的区别,可以按F1看帮助)
//1、创建QTcpSocket套接字对象
socket = new QTcpSocket();
//2、连接服务器(connectToHost(IP, port))
socket->connectToHost(IP, port);
//3、使用write( )函数向服务器发送数据
socket->write(data);
//4、关联读取信号与槽(当socket接收缓冲区有新数据到来时,会发出readRead()信号)
connect(socket, &QTcpSocket::readyRead, this, &MainWindow::socket_Read_Data);
void MainWindow::socket_Read_Data()
{
QByteArray buffer;
//读取缓冲区数据
buffer = socket->readAll();
}
//5、断开与服务器的连接(关于close()和disconnectFromHost()的区别,可以按F1看帮助)
socket->disconnectFromHost();