Qt&&C++ 实现Tcp Server
关于Qt&C++实现Tcp服务器的一些简易使用笔记...
"材料"准备
#include <QTcpServer> //Server需要包含该头文件,Client则不用
#include <QTcpSocket>
#include <QHostAddress>
服务器流程简要
1. 实例化一个QTcpServer对象: QTcpServer* server = new QTcpServer(this);
2. 开始监听server的ip和端口: server->listen(QHostAddress("127.0.0.1"),12345);
3. 处理信息等...(如下使用说明)
4. 关闭server: server->close();
服务器流程使用说明
在开始监听Server后,如果有客户端连接上,server会发送QTcpServer::newConnection信号,
我们可以在槽函数里面调用server->hasPendingConnections()判断是否还有新连接的客户端,
不断循环去用server->nextPendingConnection()接受新客户端.
使用如下:
while(server->hasPendingConnections())
{
//nextPendingConnection返回下一个挂起的连接作为已连接的QTcpSocket对象
//返回的QTcpSocket对象不能在另一个线程使用,可重写incomingConnection()满足需要.
QTcpSocket *socket=server->nextPendingConnection();
//...在下面写对于连接上的客户端操作
}
对于读取客户端发来的数据,我们可以用另一个槽函数处理,因为每当客户端发来消息时,socket对象会发送QTcpSocket::readyRead的信号
我们可以判断client发送的消息并对对方发送数据( 发送数据需要用客户端的套接字的write方法, socket->write(QByteArray类型数据); )
对上面的代码稍作修改,就是这样:
while(server->hasPendingConnections())
{
//nextPendingConnection返回下一个挂起的连接作为已连接的QTcpSocket对象
//返回的QTcpSocket对象不能在另一个线程使用,可重写incomingConnection()满足需要.
QTcpSocket *socket=server->nextPendingConnection();
//...在下面写对于连接上的客户端操作
connect(socket,&QTcpSocket::readyRead,[this,socket]{
//当socket发来消息,在这里处理即可
if(socket->bytesAvailable()<=0)//如果没消息可以获取就返回
return;
QByteArray readbytes = socket->readAll();//此时socket->readAll();即可获取套接字传来的信息
//...剩余其他操作在后面处理即可
socket->write(QString("read success").toUtf8());//利用socket这样就可以发送数据
});
}
本文作者:Bcaid
本文链接:https://www.cnblogs.com/bcaid/p/qt_cxx_tcp_server.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步