赞
踩
1.在Qt中,QtNetwork模块是用来进行网络编程,Qt提供了一层统一的套接字抽象用于编写不同层次的网络程序,避免了应用套接字进行网络编的繁琐,对不同平台,Qt都可以很好的支持,不用另外添加别的库。
2.而TCP:(Transmission Control Protocol 传输控制协议)是网络编程的其中一种,它是面向连接的相对可靠的基于字节流的传输层通信协议。相比UDP的开放式无连接不可靠的传输层通信协议安全性要好一些。
3.我的开发环境是:QT Creator 5.7,我最终的项目是想做成客户端与服务器能互发文本信息,上传、下载文件,互发图像文件,就是客户端往服务器发送图像,服务器器接收成功之后,使用OpenCV做相关的图像处理之后返回之前发出的服务器。
1.新建一个TCPServer的项目,然后在pro文件里面添加QtNetwork模型。代码如下:
QT += network
2.因为可视化可以更好的体现整个流程,这里我用Qt搭了一个简易的界面,如下图:
这里我指定的服务器的IP地址为127.0.0.1,端口是8000,这个也可以按自己的需求改。
3.然后给监听这个功能添加代码,运行程序之后,只有你点击监听这个按键,服务器才算正式启动,开始监听是新的客户端开始连接。
//启动服务器开始监听
void Server::on_buttonMonitor_clicked()
{
//监听所有IP地址
bool monitor = tcpServer->listen(QHostAddress::Any,ui->lineEditServerPorts->text().toInt());
//按键状态
if(monitor)
{
ui->buttonMonitor->setEnabled(false);
ui->buttonDisconnect->setEnabled(true);
ui->textEditStatus->append("开始监端口......");
}
else
{
ui->textEditStatus->append("启动服务器失败!");
}
}
4.断开服务器,当有客户端还连接的时候,会等待指定的时间之后再断开。
//断开与所有客户端的连接
void Server::on_buttonDisconnect_clicked()
{
//如果有客户端连接
if(tcpClient.length() > 0)
{
for(int i = 0; i < tcpClient.length();i++)
{
//断开
tcpClient.at(i)->disconnectFromHost();
//等待
bool dis = tcpClient.at(i)->waitForDisconnected(10000);
if(dis)
{
//删除客户端
tcpClient.removeAt(i);
}
else
{
ui->textEditStatus->append("断开连接失败!");
}
}
tcpServer->close();
ui->buttonMonitor->setEnabled(true);
ui->buttonDisconnect->setEnabled(false);
ui->textEditStatus->append("断开连接成功!");
}
else
{
ui->textEditStatus->append("当前没有连接的客户端!");
}
}
1.新建一个TCPClient的项目,然后在pro文件里面添加QtNetwork模型。代码如下:
QT += network
2.客商的界面如下图:
3.连接按键添加代码。
//连接服务器
void Client::on_buttonConnect_clicked()
{
tcpClient->connectToHost(ui->lineEditServerIP->text(),ui->lineEditServerPorts->text().toInt());
if(tcpClient->waitForConnected(10000))
{
ui->buttonConnect->setEnabled(false);
ui->buttonDisconnect->setEnabled(true);
ui->buttonSendMessage->setEnabled(true);
ui->textEditStatus->append("连接服务器成功!");
}
else
{
ui->textEditStatus->append("连接失败,请检查IP地址和端口!");
}
}
4.断开与服务器的连接
//断开
void Client::on_buttonDisconnect_clicked()
{
tcpClient->disconnectFromHost();
//断开成功
if (tcpClient->state() == QAbstractSocket::UnconnectedState || tcpClient->waitForDisconnected(1000))
{
ui->buttonConnect->setEnabled(true);
ui->textEditStatus->append("连接已断开!");
ui->buttonDisconnect->setEnabled(false);
ui->buttonConnect->setEnabled(true);
}
else
{
ui->textEditStatus->append("无法断开与服务器的连接!");
}
}
1.都添加了代码,就开始测试是否可以连接,首先先启动服务器端,然后输入IP地址和端口,按一监听键,开始监听。
2.启动客户端,输入服务器的IP地址和端口,点连接按钮,开始连接到服务器。
3.当前客户端已经连接上客服器,那接下要做的事,如果让客户端往服务器发信息,或者服务器把信息返回给客户端,或者以广播的形式向所有连接到的客户端都发信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。