#|QT TCP 多客户端读写
直接上代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include
#include
#include namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{
Q_OBJECTpublic:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QStringList list;
QList socketList;
QTcpServer *mytcp = nullptr;
QTcpSocket *mysock = nullptr;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#define cout qDebug()<< "[" <<__FILE__ <<":"<<__FUNCTION__<<":"<<__LINE__ <<"]"MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
mytcp = new QTcpServer;
mysock = new QTcpSocket;
cout << "listen";
//关联客户端连接信号newConnection
connect(mytcp,&QTcpServer::newConnection,this,
[=]()mutable
{
cout << "new connected";
mysock = mytcp->nextPendingConnection();
//获取套接字
socketList.append(mysock);
//记录连接的socket
cout << socketList;
QString info = QString("%1:%2").arg(mysock->peerAddress().toString()).arg(mysock->peerPort());
//连接的socket的IP,port
cout << info;
list << info;
ui->comboBox->clear();
ui->comboBox->addItems(list);
//断开连接
connect(mysock,&QTcpSocket::disconnected,this,
[=]()mutable
{
QTcpSocket *mysock = (QTcpSocket*)sender();
//掉线对象
QString info = QString("%1:%2").arg(mysock->peerAddress().toString()).arg(mysock->peerPort());
cout << info;
//打印出掉线对象的ip
socketList.removeOne(mysock);
//移除断开的socket
list.removeOne(info);
ui->comboBox->clear();
ui->comboBox->addItems(list);
}
);
//接收数据
connect(mysock,&QTcpSocket::readyRead,this,
[=]()mutable
{
QTcpSocket *mysock = (QTcpSocket*)sender();
//掉线对象
QString info = QString("%1:%2").arg(mysock->peerAddress().toString()).arg(mysock->peerPort());
cout << info;
//打印出掉线对象的ip
ui->textEdit->append(info + "->" + mysock->readAll());
}
);
}
);
//启动服务器监听
mytcp->listen(QHostAddress::Any,8899);
}MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::on_pushButton_clicked()
{
QTcpSocket *mysock = socketList.at(ui->comboBox->currentIndex());
QString info = QString("%1:%2").arg(mysock->peerAddress().toString()).arg(mysock->peerPort());
cout << info << mysock;
mysock->write(ui->lineEdit->text().toLatin1(),ui->lineEdit->text().size());
}
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- CVE-2020-16898|CVE-2020-16898 TCP/IP远程代码执行漏洞
- 爱就是希望你好好活着
- 昨夜小楼听风
- 知识
- 死结。
- 我从来不做坏事
- 烦恼和幸福
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- Linux下面如何查看tomcat已经使用多少线程