代码拉取完成,页面将自动刷新
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTcpSocket>
const quint16 PORT = 12345;
const int DATA_STREAM_VERSION = QDataStream::Qt_4_6;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//初始化服务器server对象
mServer = new QTcpServer();
//关联客户端连接信号newConnection
connect(mServer, SIGNAL(newConnection()), this, SLOT(new_client())); //连接客户端
//启动服务器监听
mServer->listen(QHostAddress::Any, PORT);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::new_client()
{
qDebug()<<"new_client here";
TcpInfo tcpInfo;
QTcpSocket *mSocket = mServer->nextPendingConnection();//与客户端通信的套接字
tcpInfo.mSocket = mSocket;
vTcpInfo.append(tcpInfo);
//关联接收客户端数据信号readyRead信号(客户端有数据就会发readyRead信号)
connect(mSocket,SIGNAL(readyRead()),this,SLOT(read_client_data()));
//检测掉线信号
connect(mSocket,SIGNAL(disconnected()),this,SLOT(client_dis()));
/* socket出错 -> 出错处理 */
connect(mSocket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(show_error(QAbstractSocket::SocketError)));
}
TcpInfo MainWindow::tcpInfoGet(QTcpSocket *socket)
{
int i = 0;
QVector<TcpInfo>::iterator iter;
for (iter = vTcpInfo.begin(); iter != vTcpInfo.end(); iter++)
{
if(iter->mSocket == socket)
{
iter->index = i;
return *iter;
}
i++;
}
}
void MainWindow::cleanConnect(QTcpSocket *socket)
{
TcpInfo tcpInfo = tcpInfoGet(socket);
vTcpInfo.remove(tcpInfo.index);
}
/* 首部 = 用户名 + 文件名 + 总大小 + 用户名长度 + 文件名长度*/
void MainWindow::read_client_data()
{
qDebug() << "read_client_data here";
//可以实现同时读取多个客户端发送过来的消息
QTcpSocket *receive = (QTcpSocket*)sender();
if(receive->bytesAvailable() > 0)
{
QByteArray array = receive->readAll();
qDebug() << array;
}
}
void MainWindow::client_dis()
{
QTcpSocket *obj = (QTcpSocket*)sender();//掉线对象
obj->close();
cleanConnect(obj);
qDebug()<<obj->peerAddress().toString();//打印出掉线对象的ip
}
/*--- 出错处理 ---*/
void MainWindow::show_error(QAbstractSocket::SocketError)
{
QTcpSocket *obj = (QTcpSocket*)sender();
qDebug() << obj->errorString();
obj->close(); // 关cocket
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。