首页 > 其他 > 详细

Qt下TCP编程

时间:2017-05-24 18:04:48      阅读:340      评论:0      收藏:0      [点我收藏+]

一、服务器

1、声明一个QTcpServer对象

QTcpServer* serverListener;

2、new出对象

this->serverListener = new QTcpServer();

3、服务器监听

QHostAddress ipAddress(“192.168.1.1”);

quint16 ipPort = 8080;

serverListener->listen(ipAddress,ipPort);

4、声明一个QList对象用于存客户端

QList<QTcpSocket*> clientList;

5、连接信号与槽

QObject::connect(this->serverListener,SIGNAL(newConnection()),this,SLOT(newConnection()));//newConnection是自定义槽函数,用于管理clientList列表

6、实现newConnection函数,保存客户端至clientList

void TcpServer::newConnection()

{

  QTcpSocket* serverClient = this->serverListener->nextPendingConnection();//new出客户端对象

  this->clientList.append(serverClient);//保存

  QObject::connect(serverClient,SIGNAL(readyRead()),this,SLOT(rcvData()));//当此客户端有数据时在自定义rcvData函数里接收

  QObject::connect(serverClient,SIGNAL(disconnected()),this,SLOT(removeClient()));//当此客户端断开连接时,会发出disconnected信号,在自定义removeClient里去除客户端

}

7、实现removeClient函数,去除客户端

void TcpServer::removeClient()

{

  for(int i=0;i<this->clientList.length();i++)

  {

  if(clientList.at(i)->socketDescriptor() == -1)//用于判断当前客户端是否有效

    clientList.removeAt(i);

  }

}

8、实现rcvData函数,接收数据

void TcpServer::rcvData()

{

  QByteArray ba;

  ba = clientList.at(i)->readAll();

}

9、发送数据

clientList.at(n)->write(QByteArray ba);

10、停止

serverListener->close();

二、客户端

1、声明一个QTcpSocket对象

QTcpSocket* tcpClient;

2、new出对象

this->tcpClient = new QTcpSocket();

3、连接服务器,连接信号与槽

tcpClient->connectToHost("192.168.1.1","8080");

QObject::connect(this->tcpClient,SIGNAL(readyRead()),this,SLOT(rcvData()));//rcvData是自定义接收槽函数

4、实现rcvData函数,接收数据

void TcpClient::rcvData()

{

  QByteArray ba = tcpClient->readAll();

}

5、发送数据

tcpClient->write(QByteArray ba);

6、关闭

tcpClient->close();

Qt下TCP编程

原文:http://www.cnblogs.com/judes/p/6900127.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!