关于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这样就可以发送数据
});
}
标签:...,socket,C++,server,客户端,QTcpSocket,nextPendingConnection,Server,Qt From: https://www.cnblogs.com/bcaid/p/qt_cxx_tcp_server.html