TCP

简介:

  • TCP 是一个面向数据流和连接的可靠传输协议。

    QTcpSocket类为TCP提供了一个接口,继承自QAbstractSocket。

    可以使用QTcpSocket来实现POP3\SMTP\NNTP 等标准的网络协议。

    与UdpSocket 传输的数据报不同,QTcpSocket传输的是连续的数据流,尤其适合于连续的数据传输。

连接:

1、在任何数据传输之前,必须建立一个TCP连接到远程的主机和端口上。一旦建立连接,peer(对使用TCP协议连接在一起的主机的通称)的IP地址和端口 可以用

QTcpSocket::peerAddress()

QTcpSocket::peerPort()

来获取。

2、在任何时间peer都可以关闭连接,传输会立即终止。

读写:

写:QTcpSocket::write()

读:QTcpSocket::read()

是否有数据可读: QTcpSocket::bytesAvailable()

通信:

使用QTcpServer类:

  • 设置服务器:QTcpServer::listen()

  • 关联信号:QTcpServer::newConnection()

  • 接收连接:QTcpServer :: nextPendingConection()

  • 在同步模式下, 要注意阻塞的问题。

服务端案例:

1、建立Qt gui 工程。项目名称tcpServer, 类名:Server

2、tcpServer.pro 文件中添加“QT+=network”

3、server.ui 中添加控件。

4、编写server.h

添加类的前置声明:class QTcpServer;

添加私有对象定义: QTcpServer *tcpServer;

添加私有槽声明: void sendMessage();

5、编写server.cpp

添加头文件 #include <QtNetwork>改写构造函数:

tcpServer = new QTcpServer(this);

// 使用了IPv4的本地主机地址,等价于QHostAddress("127.0.0.1")
if (!tcpServer->listen(QHostAddress::LocalHost, 6666)) {qDebug() << tcpServer->errorString();close();
}
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendMessage()));

添加发送信息槽的实现代码:

   void Server::sendMessage()

{
// 用于暂存我们要发送的数据
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
// 设置数据流的版本,客户端和服务器端使用的版本要相同
out.setVersion(QDataStream::Qt_4_0);
out << (quint16)0;
out << tr(“hello TCP!!!”);
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
// 获取已经建立的连接的套接字
QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
connect(clientConnection, SIGNAL(disconnected()),
clientConnection, SLOT(deleteLater()));
clientConnection->write(block);
clientConnection->disconnectFromHost();
// 发送数据成功后,显示提示
ui->label->setText(“send message successful!!!”);
}

客户端案例:

1、建立Qt gui 工程。项目名称tcpClient, 类名:Client2、tcpClient.pro 文件中添加“QT+=network”3、client.ui 中添加控件。4、编写client.h 添加头文件: #include

添加类的前置声明:class QTcpSocket;
添加私有对象定义: QTcpSocket *tcpSocket;

 QString message;
// 用来存放数据的大小信息
quint16 blockSize;

添加私有槽声明:
void newConnect();
void readMessage();
void displayError(QAbstractSocket::SocketError
void on_connectButton_clicked();

5、编写client.cpp
添加头文件 #include

改写构造函数:tcpSocket = new QTcpSocket(this);
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readMessage()));
connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(displayError(QAbstractSocket::SocketError)));

信号槽程序:

void Client::newConnect()
{    // 初始化数据大小信息为0    blockSize = 0;  // 取消已有的连接   tcpSocket->abort();     tcpSocket->connectToHost(ui->hostLineEdit->text(),                             ui->portLineEdit->text().toInt());  if(!socket->waitForConnected(30000))  {  qDebug()<<tr("连接服务器失败,请重新操作!"); }   else  {     qDebug()<<tr("连接服务器成功!");                 QMessageBox::warning(this,tr("连接提示"),tr("连接服务器成功!"),QMessageBox::Yes,QMessageBox::No); }
}
void Client::readMessage()
{QDataStream in(tcpSocket);// 设置数据流版本,这里要和服务器端相同in.setVersion(QDataStream::Qt_4_6);// 如果是刚开始接收数据if (blockSize == 0) {//判断接收的数据是否大于两字节,也就是文件的大小信息所占的空间//如果是则保存到blockSize变量中,否则直接返回,继续接收数据if(tcpSocket->bytesAvailable() < (int)sizeof(quint16)) return;in >> blockSize;}// 如果没有得到全部的数据,则返回,继续接收数据if(tcpSocket->bytesAvailable() < blockSize) return;// 将接收到的数据存放到变量中in >> message;// 显示接收到的数据qDebug() << message;ui->messageLabel->setText(message);
}

客户端界面:

连接地址:资源Qt5 Socket 简单通讯实例,本人在做上位机开发的时候,简单做的一个案例,可实现客户端和服务端的收发。 案例简单实用,供参考。

Qt TCP 通讯简单案例相关推荐

  1. Python中UDP/TCP通讯简单案例

    python使用udp协议要通过socket技术: 1.引包 2.创建流对象(ipv4, udp) 3.发送(二进制字符串, 元组ip和端口) 4.关闭流对象 socket: 译为:套接字/流对象 网 ...

  2. 融云PC端javascript即时通讯简单案例

    进入页面引入:二选一 <script src="http://cdn.ronghub.com/RongIMLib-2.1.3.min.js"></script&g ...

  3. Omorn - NJ301-1100 AND NX102-9000 - Socket - TCP 通讯

    目录 Omorn - NJ301-1100 AND NX102-9000 - Socket - TCP 通讯 测试案例IP 通讯验证 Omorn - NJ301-1100 AND NX102-9000 ...

  4. Qt之tcp的简单使用

    今天需要做一个服务器端的tcp通信 因为之前没有用过qt的方法,只用过C语言版本的,所以干脆客户端和服务器端都查了下,做个笔记. 先上代码 客户端.h //mainwindow.h #ifndef M ...

  5. Qt TCP协议 传输简单字符串实例

    TCP协议的程序使用的是客户端/服务器模式,在Qt中提供了QTcpSocket类来编写客户端程序,使用QTcpServer类编写服务器端程序. A 转载:http://mobile.51cto.com ...

  6. 《 Python程序设计项目案例》— 用Python开发的基于TCP通讯协议的私人聊天室 (期末大作业、结课作业、课程设计、毕业设计)

    基于Python与TCP协议的私人聊天室(GUI交互界面,用户注册.用户登录.实时聊天,文件上传与下载) 用Python开发的基于TCP通讯协议的实时聊天通讯和文件共享应用 目录 基于Python与T ...

  7. QT TCP局域网通讯工具 V1.0

    TCP局域网通讯工具 V1.0 局域网 一件发送消息.发送文件软件. 1.实现了发送消息.多台客户端连入服务器均可看到客户端IP地址和内容. 2.实现了客户端给服务器发送文件功能. 本文作者原创,转载 ...

  8. 基于MDKA5D31-EK_T70开发板的QT示例-demo08:TCP通讯

    By Mcuzone 硬件平台:MDKA5D31-EK_T70开发板  QT版本:4.8.5  简要说明:本示例主要演示应用程序作为UDP服务器和客户端的通讯过程. 应用程序运行效果: 一.网络连接: ...

  9. JAVA通信编程(三)——TCP通讯

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

最新文章

  1. c语言增强,C语言提高-day5
  2. 接口与object的关系
  3. ztree树形菜单demo
  4. 关于嵌套循环的循环初始化语句问题:
  5. 使用PostBackUrl与Server.Transfer传递数据
  6. 理解 e.clientX,e.clientY e.pageX e.pageY e.offsetX e.offsetY
  7. gitlab 目录tag_【环境搭建】gitlab-ci(持续集成)
  8. deepfake ai智能换脸_AI 换脸、声音篡改等,明确写入新版民法典!
  9. A股开盘:深证区块链50指数跌0.20%,136只概念股下跌
  10. html li占用两行,谁帮我解决一下LI上下两行错位的BUG。_html/css_WEB-ITnose
  11. busybox linux内核,使用busybox创建精简linux内核实例
  12. 9.性能之巅 洞悉系统、企业与云计算 --- 磁盘
  13. 解压.tar.bz2文件出现错误
  14. iOS开发60分钟入门
  15. 微信小程序常用路由跳转方法
  16. tf卡可以自己裁剪成nm卡_手头这多卡—到底哪款TF卡才值得购买?
  17. 基于CST电磁仿真软件的7-10GHz的微带带通滤波器的设计
  18. 扫地机器人的“新故事”,从“第三次革命”开始
  19. 2018年需要记住的5个区块链事实
  20. Office365 - 如何修改Teams group关联的Email Address?

热门文章

  1. Inception代码解读
  2. USTC English Club Note20171012(4)
  3. <马哲>科学技术在社会发展中的作用2017-12-27
  4. 一爱就是一辈子:坚持4年的编程爱好
  5. 云炬Qtpy5开发与实战笔记 2PyCharm添加QTDesinger扩展并创建第一个.ui文件
  6. 机器学习笔试精选题精选(四)
  7. 【完结】林轩田机器学习技法终章
  8. VTK修炼之道49:图形基本操作进阶_网格平滑(点云的曲面重建技术)
  9. Asp.net常用技巧
  10. 有关软件开发中的一些想法