TCP通信总结 ZY_tcp通信总结zy

2020-02-27 其他工作总结 下载本文

TCP通信总结 ZY由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“tcp通信总结zy”。

Qt 中利用 TCP 实现多个客户端之间相互发送消息系以及服务器的群发信息

思路如下:首先每个客户端与服务器相连是会有一个对应的 Tcpsocket,把这些sockt 全部放入一个 list 容器中,当客户端有数据发送时,读取是哪个 socket 中的消息,读取完后,再把消息发送到 list 中的所有 socket 中,在客户端判断这个消息是不是发送给自己的,如果是,则接受,否则不接受(在读到是哪个 socket 中有数据时,也可直接写入到这个 socket 中),要注意的是对数据进行打包和解包。对数据进行分析,我这个只是一个简单的参考。创建一个存放 socket 的 list 容器:

socket_list= newQList;把客户端的 socket 放入 list 容器中:

m_tcpsocket = m_tcpserver->nextPendingConnection();socket_list->append(m_tcpsocket);

connect(m_tcpsocket,SIGNAL(readyRead()), this,SLOT(readMeage()));服务器读取客户端的消息: void Widget::readMeage(){

for(int i = 0;i length();i ++){ array_str = QString(socket_list->at(i)->readAll());if(!(array_str.isEmpty())){ qDebug()

}

void Widget::sendMeage(QString infomation){

for(int i = 0;i length();i ++){ socket_list->at(i)->write(cmd.toUtf8().data());//m_tcpsocket->write(infomation.toUtf8().data());

}

}

实例程序:

pro 文件里要加一句:QT += network

服务器端:

1、声明QTcpServer、QTcpSocket QTcpServer *tcpServer;//监听套接字 QTcpSocket *tcpSocket;//通信套接字

2、定义、实例化

tcpServer = NULL;tcpSocket = NULL;tcpServer = new QTcpServer(this);tcpServer->listen(QHostAddre::Any,8888);//监听所有

connect(tcpServer,SIGNAL(newConnection()),this,SLOT(getSocket()));socket_list = new QList;//zy服务器一对多客户端用到

3、作为服务器通过TCP协议接收数据 void MainWidget::getSocket(){ tcpSocket = tcpServer->nextPendingConnection();//获取已经建立的连接的子套接字

socket_list->append(tcpSocket);//添加到socket_list中

QString ip = tcpSocket->peerAddre().toString();//此处是通过通信的套接字进行获取,也可以获取对方的IPv6和IPv4,但是此处转换为QString型

qint16 port = tcpSocket->peerPort();//直接获取端口,不需要进行转换

QString temp = QString::fromLocal8Bit(“[%1:%2]:成功连接”).arg(ip).arg(port);qDebug()

[=](){ //这种只能1对1

//从通信套接字中取出内容//array = @i00009装备9请求帮助$

//array = tcpSocket->readAll();//readAll()函数是比较方便的取出tcpSocket中的所有的内容

// array_str = QString(array);

// qDebug()

for(int i = 0;i length();i ++){ array_str = QString(socket_list->at(i)->readAll());//依次 //注意接收和发送的编码要一致 读取

if(!(array_str.isEmpty()))

{ qDebug()

//解析数据

if(array_str.mid(0,1)== “@” &&

array_str.mid(array_str.size()-1,1)== “$”)//帧头帧尾

{ if(array_str.mid(1,1)== “i”)//功能码

{

ui->information->setText(array_str.mid(7,array_str.size()-8));} if(array_str.mid(1,1)== “j”)//功能码

{

ui->information->setText(array_str.mid(7,array_str.size()-8));} }

//将读到的数据插入到数据库中

QString insert_tcp_text = “insert into meage_tcp_receive values(null,?,?,now())”;QSqlQuery sql_insert_tcp_text;sql_insert_tcp_text.prepare(insert_tcp_text);sql_insert_tcp_text.bindValue(0, array_str.mid(0,5));sql_insert_tcp_text.bindValue(0, array_str);sql_insert_tcp_text.exec();

if(array_str.mid(0,1)== “0”)//功能码

{ QString select_data = “select car_id from realtime_data limit 1”;QSqlQuery sql_select_data;sql_select_data.prepare(select_data);sql_select_data.exec();QString

id=QString::number(sql_select_data.value(0).toInt()+1);

QString insert_data = “insert into realtime_data values(null,?,?,?,?,?,0,0,0,0,0,0,0,0,0,0,0,0,now(),now())”;QSqlQuery sql_insert_data;sql_insert_data.prepare(insert_data);sql_insert_data.bindValue(0, id);sql_insert_data.bindValue(1, “401158”);sql_insert_data.bindValue(2, array_str.mid(2,5));sql_insert_data.bindValue(3, “192.168.1.4”);sql_insert_data.bindValue(4, “192.168.1.108”);sql_insert_data.exec();

QString back_id=id.sprintf(“%05d”,id);;writeCmd(“@0”+back_id+“$”);

}

}

4、作为服务器发送数据信息

void MainWidget::writeCmd(QString cmd){ //这种只能1对1

// //qDebug()

// return;

// }//如果最开始没有建立连接,那么tcpSocket就为一个空的值,这时不能进行发送数据的操作

// //发送数据给对方,使用套接字tcpSocket // tcpSocket->write(cmd.toUtf8().data());

//这种能1对多

for(int i = 0;i length();i ++){ socket_list->at(i)->write(cmd.toUtf8().data());//注意接收和发送的编码要一致

//m_tcpsocket->write(infomation.toUtf8().data());

} }

客户器端:

1、声明,定义QTcpSocket QTcpSocket *socket;

2、实例化,建立TCP连接

//TCP连接

socket = new QTcpSocket();connect(socket, SIGNAL(connected()), this, SLOT(OnConnected()));connect(socket, SIGNAL(disconnected()), this, SLOT(OnDisconnected()));connect(socket, SIGNAL(readyRead()), this, SLOT(socket_Read_Data()));int port = 8888;//获取端口号,与服务器端口一致

socket->abort();//取消已有的连接

socket->connectToHost(IP, port);//连接服务器

if(!socket->waitForConnected(1000))//等待连接成功

{ qDebug()

{ qDebug()

3、作为客户端通过TCP协议接收数据 //从服务器端获取控制信号

void MainWindow::socket_Read_Data(){ QByteArray signal;//读取缓冲区数据

signal = socket->readAll();QString signaldata;signaldata = QString(signal);}

4、作为客户端发送数据信息

void MainWidget::writeCmd(QString cmd){ //这种只能1对1

//qDebug()

if(NULL == tcpSocket){ return;}//如果最开始没有建立连接,那么tcpSocket就为一个空的值,这时不能进行发送数据的操作

//发送数据给对方,使用套接字tcpSocket

tcpSocket->write(cmd.toUtf8().data());

}

zy竣工总结

如皋市中央大道(益寿南路~海阳南路)工 程竣工总结 南通市港闸市政工程有限公司如皋市中央大道(益寿南路~海阳南路)工程项目经理部二0一二年十一月如皋市中央大道(益寿南路~海阳南路)......

自我剖析zy

自我剖析材料这段时间通过《保持共产党先进性教育读本》的学习和学校组织的一些学习活动,以及回顾入党志愿,对照党员的八条义务,我才发现自己是那么的渺小,有好多的不足:一、在思......

轮岗心得zy

轮岗心得入职一月,公司安排了为期5周的轮岗学习,已至金秋。此次轮岗,本着深入了解部门运作与联系情况,先后参与到安检部,调度室,运检部,营销部和城北供电所5个岗位,对各个部门工作情......

轮岗心得zy

轮岗心得入职一月,公司安排了为期5周的轮岗学习,已至金秋。此次轮岗,本着深入了解部门运作与联系情况,先后参与到安检部,调度室,运检部,营销部和城北供电所5个岗位,对各个部门工作情......

测绘一班zy

2013--2014第一学期2012级(秋季)形式与政策期末论文试题1、联系实际,谈谈你对“中国梦”的理解。2、深入开展党的群众路线教育实践活动的内容是什么?有什么重要意义?3、云南是美......

《TCP通信总结 ZY.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
TCP通信总结 ZY
点击下载文档
相关专题 tcp通信总结zy 通信 TCP zy tcp通信总结zy 通信 TCP zy
[其他工作总结]相关推荐
[其他工作总结]热门文章
下载全文