TCP通信(01)

2023-05-16

服务器端向客户端发送数据

客户端

#include "tcpclientdialog.h"
#include "ui_tcpclientdialog.h"

TcpClientDialog::TcpClientDialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::TcpClientDialog)
{
    ui->setupUi(this);
    tcpSocket = new QTcpSocket(this);
    connect(tcpSocket, &QTcpSocket::readyRead,
            this, &TcpClientDialog::readMessage);
    connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
            this, SLOT(displayError(QAbstractSocket::SocketError)));
}

TcpClientDialog::~TcpClientDialog()
{
    delete ui;
}

void TcpClientDialog::newConnect()
{
    blockSize = 0;
    tcpSocket->abort();
    tcpSocket->connectToHost(ui->hostLineEdit->text(), 
                             ui->portLineEdit_2->text().toInt());

}

void TcpClientDialog::readMessage()
{
    QDataStream in(tcpSocket);
    in.setVersion(QDataStream::Qt_5_9);
    if(blockSize == 0){
        if(tcpSocket->bytesAvailable() < (int)sizeof(quint16)){
            return;
        }
        in >> blockSize;
    }
    if(tcpSocket->bytesAvailable() < blockSize){
        return;
    }
    in >> message;
    ui->messageLabel->setText(message);

}

void TcpClientDialog::displayError(QAbstractSocket::SocketError)
{
    qDebug() << tcpSocket->errorString();

}


void TcpClientDialog::on_connectButton_clicked()
{
    newConnect();
}


#include "tcpclientdialog.h"
#include "ui_tcpclientdialog.h"

TcpClientDialog::TcpClientDialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::TcpClientDialog)
{
    ui->setupUi(this);
    tcpSocket = new QTcpSocket(this);
    connect(tcpSocket, &QTcpSocket::readyRead,
            this, &TcpClientDialog::readMessage);
    connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
            this, SLOT(displayError(QAbstractSocket::SocketError)));
}

TcpClientDialog::~TcpClientDialog()
{
    delete ui;
}

void TcpClientDialog::newConnect()
{
    blockSize = 0;
    tcpSocket->abort();
    tcpSocket->connectToHost(ui->hostLineEdit->text(), 
                             ui->portLineEdit_2->text().toInt());

}

void TcpClientDialog::readMessage()
{
    QDataStream in(tcpSocket);
    in.setVersion(QDataStream::Qt_5_9);
    if(blockSize == 0){
        if(tcpSocket->bytesAvailable() < (int)sizeof(quint16)){
            return;
        }
        in >> blockSize;
    }
    if(tcpSocket->bytesAvailable() < blockSize){
        return;
    }
    in >> message;
    ui->messageLabel->setText(message);

}

void TcpClientDialog::displayError(QAbstractSocket::SocketError)
{
    qDebug() << tcpSocket->errorString();

}


void TcpClientDialog::on_connectButton_clicked()
{
    newConnect();
}


服务器端

#ifndef TCPSERVERDIALOG_H
#define TCPSERVERDIALOG_H

#include <QDialog>
#include <QtNetwork>
#include <QDebug>

class QTcpServer;

QT_BEGIN_NAMESPACE
namespace Ui { class TcpServerDialog; }
QT_END_NAMESPACE

class TcpServerDialog : public QDialog
{
    Q_OBJECT

public:
    TcpServerDialog(QWidget *parent = nullptr);
    ~TcpServerDialog();

private slots:
    void sendMessage();

private:
    Ui::TcpServerDialog *ui;
    QTcpServer *tcpServer;
};
#endif // TCPSERVERDIALOG_H

#include "tcpserverdialog.h"
#include "ui_tcpserverdialog.h"

TcpServerDialog::TcpServerDialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::TcpServerDialog)
{
    ui->setupUi(this);

    tcpServer = new QTcpServer(this);
    //QHostAddress::LocalHost 等价于QHostAddress("127.0.0.1")
    if(!tcpServer->listen(QHostAddress::LocalHost, 6666)){
        qDebug() << tcpServer->errorString();
        close();
    }
    connect(tcpServer, &QTcpServer::newConnection,
            this, &TcpServerDialog::sendMessage);

}

TcpServerDialog::~TcpServerDialog()
{
    delete ui;
}

void TcpServerDialog::sendMessage()
{
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_5_9);
    out << (quint16)0;
    out << tr("hello tcp!");
    out.device()->seek(0);
    out << (quint16)(block.size() - sizeof(quint16));

    QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
    connect(clientConnection, &QTcpSocket::disconnected,
            clientConnection, &QTcpSocket::deleteLater);
    clientConnection->write(block);
    clientConnection->disconnectFromHost();
    ui->label->setText(tr("发送数据成功了!"));

}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP通信(01) 的相关文章

  • 数据包丢失和数据包重复

    我试图找出数据包丢失和数据包重复问题之间的区别 有谁知道 数据包重复 是什么意思 和TCP检测到丢失时重传数据包一样吗 No In TCP 数据包 的传递是可靠的 我认为在这种情况下术语数据应该更好 因为它是面向流的协议 数据包丢失和重复是
  • C# Socket.receive连续接收0字节且循环中不阻塞

    我正在尝试用 C 编写一个最简单的多线程 TCP 服务器 它接收来自多个客户端的数据 每次连接新客户端时 都会建立套接字连接 并将套接字作为参数传递给新类函数 之后运行 while 循环并接收数据 直到客户端连接为止 这里的问题是 sock
  • 自动打开命名管道和 tcp\ip

    我正在安装一个需要修改 SQL Server 的新产品 具体来说 启用 tcp ip 并打开命名管道 我知道如何手动完成 我想要的是一种通过 SQL 或 C 代码为新客户自动化执行此操作的方法 我希望有任何关于正确方向的建议 您可以使用 C
  • 访问 AWS 上的 Tensorboard

    我正在尝试访问 AWS 上的 Tensorboard 这是我的设置 张量板 tensorboard host 0 0 0 0 logdir train 在端口 6006 上启动 TensorBoard b 39 您可以导航到http 172
  • 无法分配请求的地址 - 可能的原因?

    我有一个由主服务器和分布式从服务器组成的程序 从属服务器向服务器发送状态更新 如果服务器在固定时间内没有收到特定从属服务器的消息 则会将该从属服务器标记为关闭 这种情况一直在发生 通过检查日志 我发现从站只能向服务器发送一个状态更新 然后永
  • 为什么 UDP 服务器中只有一个套接字?

    我正在准备考试 发现了这个问题 典型的 UDP 服务器可以使用单个套接字来实现 解释一下为什么 对于 TCP 驱动的服务器 我发现创建了两个套接字 一个用于所有客户端访问服务器 另一个用于每个客户端的特定 套接字 用于服务器和客户端之间的进
  • 分配 TCP/IP 端口供内部应用程序使用

    我编写了一个由 Windows 服务托管的 WCF 服务 它需要侦听已知的 TCP IP 端口 我可以在什么范围内安全地分配端口供我的组织内使用 该端口将嵌入到服务和使用该服务的客户端的配置文件中 端口 0 1023 是众所周知的端口 由
  • 如何查找连接到 AF_INET 套接字的客户端的 UID?

    有什么方法或类似的东西ucred for AF UNIX如果是AF INET插座 TCP在我的例子中 找出连接到我的套接字的客户端的UID 还有 proc net tcp但它显示了UID of the creator插座的而不是连接的cli
  • 触发“对等方重置连接”

    我想测试当发生 对等方重置连接 错误时我们的应用程序 嵌入式 ftp 服务器 中发生的日志记录 这个帖子 https stackoverflow com questions 1434451 connection reset by peer很
  • 如何强制关闭 TcpListener

    我有一个通过 tcpListener 进行通信的服务 问题是当用户重新启动服务时 抛出 地址已在使用 异常 并且服务在几分钟左右无法启动 有没有办法告诉系统终止旧连接 以便我可以打开一个新连接 我不能只使用随机端口 因为服务无法通知客户端端
  • 谁在 Mac OS X 上监听给定的 TCP 端口?

    在Linux上 我可以使用netstat pntl grep PORT or fuser n tcp PORT找出哪个进程 PID 正在侦听指定的 TCP 端口 如何在 Mac OS X 上获得相同的信息 在 macOS 上Big Sur然
  • 为什么SOCKS5需要通过UDP中继UDP?

    The SOCKS5 https en wikipedia org wiki SOCKS SOCKS5协议 描述为RFC1928 https www rfc editor org rfc rfc1928提供对 UDP 的支持 总而言之 希望
  • TCP打孔问题

    我尝试使用 Python 3 中概述的原则为防火墙编写一个基本的 TCP 打孔器本文 http www bford info pub net p2pnat index html 不过 我无法连接任何东西 这是代码 usr bin pytho
  • 无法从亚马逊Windows实例的公共IP访问node.js服务器

    我正在 Windows 服务器的亚马逊微实例上运行 Node js 服务器 我无法使用亚马逊实例的公共IP访问node js服务器 我可以使用 localhost 12345 从实例访问 node js 服务器 但无法使用实例的公共 IP
  • 恐慌:拨打 tcp 127.0.0.1:3306:连接:连接被拒绝

    我正在尝试使用 golang gin gorm 从 docker 连接 mysql 服务器 构建本身已经成功 但是如标题所示 出现了以下错误 panic dial tcp 127 0 0 1 3306 connect connection
  • ConnectionTimeout 与 SocketTimeout

    我正在使用的库有问题 可能是图书馆的问题 也可能是我用错了 基本上 当我这样做时 超时以毫秒为单位 ignitedHttp setConnectionTimeout 1 v short ignitedHttp setSocketTimeou
  • 我首次设置 AWS EB 时创建的默认安全组是什么?

    我对几个组所扮演的角色感到困惑 这些组似乎已自动添加到我的 AWS 安全组列表中 并以我收集的默认配置进行连接 并且想知道它们是如何工作的 以及它们的安全性如何 改变 具体来说 有三个神秘之处 launch wizard 1其中有一条入站规
  • SO_REUSEPORT 可以在 Unix 域套接字上使用吗?

    Linux 内核 gt 3 9 允许通过设置在内核负载平衡的进程之间共享套接字SO REUSEPORT http lwn net Articles 542629 http lwn net Articles 542629 这如何用于类型的套接
  • 确定 TCP Listen() 队列中当前积压的连接数

    有没有办法找出currentLinux 上 TCP 套接字上等待 Accept 的连接尝试次数 我想我可以在每个事件循环上点击 EWOULDBLOCK 之前计算成功的 Accept 数量 但我使用的是隐藏这些细节的高级库 Python Tw
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL

随机推荐

  • Django——Admin站点

    Admin站点 前言 使用Admin站点 1 管理界面本地化 2 创建超级管理员 3 App应用配置 4 注册模型类 5 调整站点信息 调整列表页展示 1 列表中的列显示哪些字段 2 页大小 3 操作选项 的位置 4 右侧栏过滤器 5 搜索
  • HMTT——数据库设计

    数据库设计 前言 1 需求 2 注意事项 MySQL数据库引擎 前言 1 需求 根据黑马头条前台产品原型图中用户端的部分 进行数据库设计 表结构 字段类型 是否允许为null 是否有默认值 索引设计 数据库引擎的选择 2 注意事项 为了查询
  • HMTT——ORM

    理解ORM 前言orm作用使用ORM的方式选择 前言 orm作用 省去自己拼写SQL xff0c 保证SQL语法的正确性 一次编写可以适配多个数据库 防止注入攻击 在数据库表名或字段名发生变化时 xff0c 只需修改模型类的映射 xff0c
  • HMTT——SQLAlchemy映射构建

    SQLAlchemy映射构建 前言 1 简介 2 安装 3 数据库连接设置 4 模型类字段与选项 5 构建模型类映射 前言 1 简介 SQLAlchemy是Python编程语言下的一款开源软件 提供了SQL工具包及对象关系映射 ORM 工具
  • HMTT——SQLAlchemy操作

    SQLAlchemy操作 前言 1 新增 2 查询 3 更新 4 删除 5 事务 前言 1 新增 user span class token operator span User span class token punctuation s
  • C语言 存储设备 地址, 字节数

    字节数 xff1a 单片机是多少位的 xff0c 对应的一个地址里面存在的字节数 就是几个字节 xff1a 比如 xff1a 32位单片机 xff0c 那一个地址应该最多存放4个字节 xff0c 一个字节8位 多少位 单片机 VS 地址 V
  • HMTT——数据库理论

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 数据库理论 前言 1 复制集与分布式 2 MySQL 1 主从复制 2 分库分表 sharding 垂直拆分 水平拆分 3 黑马头条项目应用 前言 1 复制集与分布式 复制集
  • HMTT——分布式ID

    分布式ID 前言 1 方案选择 UUID Redis 雪花算法 Snowflake 2 雪花算法实现 前言 1 方案选择 UUID UUID是通用唯一识别码 Universally Unique Identifier 的缩写 开放软件基金会
  • HMTT——数据库优化

    数据库优化 前言数据库优化1 理解索引2 SQL查询优化 3 数据库优化 前言 数据库优化 数据库是Web应用至关重要的一个环节 xff0c 其性能的优劣会影响整合Web应用 xff0c 所以需要对数据库进化优化以提高使用性能 以下提供几点
  • HMTT——Redis

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 Redis 前言 1 Redis事务 基本事务指令 Python客户端操作 2 Redis持久化 RDB 快照持久化 AOF 追加文件持久化 3 Redis高可用 4 Red
  • JWT & JWS & JWE

    JWT amp JWS amp JWE 前言 Json Web Token JWT JSON Web Signature JWS JSON Web Encryption JWE 前言 Json Web Token JWT JSON Web
  • JWT的Python库

    JWT的Python库 前言独立的JWT Python库项目封装 前言 独立的JWT Python库 itsdangerous JSONWebSignatureSerializer TimedJSONWebSignatureSerializ
  • JWT禁用问题

    JWT禁用问题 前言 需求 前言 需求 token颁发给用户后 在有效期内服务端都会认可 但是如果在token的有效期内需要让token失效 该怎么办 此问题的应用场景 用户修改密码 需要颁发新的token 禁用还在有效期内的老token
  • 对象存储——七牛云存储

    七牛云存储 前言 需求 编码 前言 需求 在项目中 如用户头像 文章图片等数据需要使用文件存储系统来保存 方案 自己搭建文件系统服务 选用第三方对象存储服务 我们在头条项目中使用七牛云对象存储服务 http www qiniu com 使用
  • 对象存储——CDN

    文章目录 前言常见问题 前言 使用第三方OSS服务的好处是集成了CDN服务 xff0c 下面来了解一下什么是CDN CDN 全称 Content Delivery Network或Content Distribute Network xff
  • HTTP通信

    通过网络访问接口实现HTTP通信 mainwindow h span class token macro property span class token directive hash span span class token dire
  • onmouseover和onmouseout事件小结

    前言 onmouseover和onmouseout事件是在pc端上使用非常广泛的鼠标划入划出事件 顾名思义 onmouseover是进入到dom元素中时触发的事件 而onmouseout是移出dom元素时触发的事件 它们即使在ie低版本也有
  • 获取网络接口信息

    获取网络接口信息 mainwindow h span class token macro property span class token directive hash span span class token directive ke
  • UDP通信

    udp发送端 UdpSenderDialog h span class token macro property span class token directive hash span span class token directive
  • TCP通信(01)

    服务器端向客户端发送数据 客户端 span class token macro property span class token directive hash span span class token directive keyword