qt-tcp发送和接收识别
来源:互联网 发布:php冒泡排序法 编辑:程序博客网 时间:2024/06/05 11:47
tcp的传输方式是1:N的模式,
也就是一个服务器,对应多个客户端。
在使用的过程中,怎么区分客户端哪个是那个,谁是谁,是很重要的一个问题,
今天琢磨了好久,虽然最后失败了,还是写上来,大致了解一下,
1:客户端连接服务端。
这个就是运用到了qt的槽机制,自动的生成了线程,可以自动的获取客户端发送的数据,
// 新建tcp链接void updComm::initTcp(){ int port = ui->comboBox->currentText().toInt(); tcpSocket = new QTcpServer(this); tcpSocket->listen(QHostAddress::Any,port); connect(tcpSocket,SIGNAL(newConnection()),this,SLOT(readPendingDatagrams())); connect(tcpSocket,SIGNAL(destroyed()),this,SLOT(desConect()));}//从客户端读取数据void updComm::readdataforclient(){ for(int i=0;i<clientindex;i++) { QString rev(client[i].client->readAll()); if(!rev.isEmpty()) { ui->tedRev->append(rev); setRevNum(rev.size()); } }}
写的这个接收客户端数据的代码有点粗糙,但大概就是这个思路,
2,保存客户端链接
客户端连接之后,会触发newConnection这个槽机制,这样就可以很方便的读取到客户端的数据了,
下面是获取客户端ip,name,端口的代码,
//获取tcp链接的对象,void updComm::readPendingDatagrams(){ client[clientindex].client = tcpSocket->nextPendingConnection(); client[clientindex].name =client[clientindex].client->peerName(); client[clientindex].ip = client[clientindex].client->peerAddress(); client[clientindex].port = client[clientindex].client->peerPort(); ui->combox_ip->addItem(client[clientindex].ip.toString()); //ui->tedSend->append("address:"+tcpSocket->nextPendingConnection()->peerAddress().toString()); //ui->tedSend->append("username:"+tcpSocket->nextPendingConnection()->peerName());// qDebug()<<client[clientindex].ip;// qDebug()<<client[clientindex].client->peerName();// qDebug()<<client[clientindex].client->peerPort(); connect(client[clientindex].client,SIGNAL(readyRead()),this,SLOT(readdataforclient())); QString data = tr("wxc"); client[clientindex].client->write(data.toLatin1()); clientindex++;}
之后就算是存储了所有客户端的信息,在发送的时候,可以根据IP或者name区别客户端是哪个,然后直接发送数据,而且有了ip地址之后,可以直接使用udp进行通讯,这样就可以可以tcp传输文件,udp传输数据,进行通讯,和保持心跳了,
ps:peer是qt的一个内别,指的是客户端的一些数据,
peername读取到的是计算机的用户名,但是,,我不到,这很忧伤,试了各种办法,就是读不到,
0 0
- qt-tcp发送和接收识别
- qt 下UDP消息的接收和发送和TCP发送文件
- SOCKET TCP 发送和接收示例代码
- TCP的数据发送和接收
- TCP的数据发送和接收
- Tcp设置发送和接收超时
- tcp发送和接收的原理
- qt串口十六进制发送和接收
- QT Tcp客户端发送接收并存初体验随笔
- TCP 滑动窗口/TCP 接收和发送缓冲区/内核sock接收和发送缓冲区
- Tcp异步接收发送
- tcp 发送接收文件
- Linux中TCP和UDP发送和接收缓冲区
- Linux中TCP和UDP发送和接收缓冲区
- 基于TCP协议的发送和接收端
- tcp文件发送和接收-server端/windows
- TCP 滑动窗口(发送窗口和接收窗口)
- C#使用Socket发送和接收TCP数据示例
- 将博客搬至CSDN
- 牛顿插值多项式算法
- 【日语本】
- afxwin.h 与stdafx.h
- Hibernate-Criteria查询(2)动态查询、排序、分页、连接查询、投影查询、聚合函数
- qt-tcp发送和接收识别
- JDK环境变量配置--ubuntu版
- 1082. Read Number in Chinese (25) PAT
- oracle表数据修复错误后恢复数据
- Finding a feasible course schedule using Tabu search(1)论文翻译
- ubuntu 14.04安装W311MA无线网卡驱动
- HTTPS与HTTP的区别
- 测试
- 搜狗输入法的分词算法