#include "MyTcpServer.h"
#include <QHostAddress>
#include <QDebug>
Server::Server(QObject *parent, int port):QTcpServer(parent)
{
qDebug()<<">>>>start to listen...";
listen(QHostAddress::Any, port); //监听
}
void Server::incomingConnection(int socketDescriptor)
{
qDebug()<<">>>>a new client connect";
TcpSocket *tcpclientsocket = new TcpSocket(this);//只要有新的连接就生成一个新的通信套接字
//将新创建的通信套接字描述符指定为参数socketdescriptor
tcpclientsocket->setSocketDescriptor(socketDescriptor);
//将这个套接字加入客户端套接字列表中
tcpclientsocketlist.append(tcpclientsocket);
//接收到tcpclientsocket发送过来的更新界面的信号
connect(tcpclientsocket, SIGNAL(updateserver(QString,int)), this, SLOT(slotupdateserver(QString,int)));
connect(tcpclientsocket, SIGNAL(clientdisconnected(int)), this, SLOT(slotclientdisconnect(int)));
}
void Server::slotupdateserver(QString msg, int length)
{
//将这个信号发送给界面
emit updateserver(msg, length);
//将收到的信息发送给每个客户端,从套接字列表中找到需要接收的套接字
for(int i = 0; i < tcpclientsocketlist.count(); i++)
{
QTcpSocket *item = tcpclientsocketlist.at(i);
// if(item->write((char*)msg.toUtf8().data(), length) != length)
// {
// continue;
// }
item->write(msg.toUtf8().data());
}
}
void Server::slotclientdisconnect(int descriptor)
{
qDebug()<<">>>>client disconnect!!!";
for(int i = 0; i < tcpclientsocketlist.count(); i++)
{
QTcpSocket *item = tcpclientsocketlist.at(i);
if(item->socketDescriptor() == descriptor)
{
tcpclientsocketlist.removeAt(i);//如果有客户端断开连接, 就将列表中的套接字删除
qDebug()<<">>>>client delet";
return;
}
}
return;
}
int Server::SendData(QByteArray &arr)
{
qDebug() << ">>>>>SendSerialData:"<< arr.toHex();
int ret;
for(int i = 0; i < tcpclientsocketlist.count(); i++)
{
QTcpSocket *item = tcpclientsocketlist.at(i);
ret =item->socketDescriptor();
QHostAddress s=item->localAddress();
QString Ipadd = s.toString();
qDebug()<<">>>>ip address:"<<Ipadd;
item->write((arr));
item->flush();
}
qDebug() << ">>>>>ret:"<<ret;
if(ret < 0)
{
qDebug() << ">>>>>SendData failed:";
return -1;
}
return ret;
}
QT的TCP一个服务端连接多个客户端
需积分: 48 73 浏览量
2018-10-10
11:12:55
上传
评论 5
收藏 3KB RAR 举报
sinat_24734257
- 粉丝: 1
- 资源: 13
最新资源
- 常用工具集参考用于图像等数据处理
- 音乐展示网页、基于Stenography的图像数字水印添加与提取,以及基于颜色矩和Tamura算法的图像相似度评估算法py源码
- 基于EmguCV(OpenCV .net封装),图像数字水印加解密算法的实现,其中包含最低有效位算法,离散傅里叶变换算法+文档书
- 基于matlab+DWT的图像水印项目,数字水印+源代码+文档说明+图片+报告pdf
- (优秀毕业设计)基于python实现的数字图像可视化水印系统的设计与实现,多种数字算法实现+源代码+文档说明+理论演示pdf
- 基于DWT-DCT-SVD和deflate压缩的数字水印方法python源码+Gui界面+演示视频(高分毕业设计)
- 基于matlab实现DWT、DCT、SVD算法数字图像水印可视化系统+GUI界面+文档说明+详细注释(高分毕业设计)
- NCIAE-Data-Structure大一大二笔记
- 学习wireshark笔记
- digital-image-数据可视化笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈