工程文件

QT       += network

服务端

#ifndef WIDGET_H
#define WIDGET_H #include <QWidget>
#include <QTcpServer>
#include <QTcpSocket> namespace Ui {
class Widget;
} class Widget : public QWidget
{
Q_OBJECT public:
explicit Widget(QWidget *parent = 0);
~Widget(); private:
Ui::Widget *ui;
QTcpServer *server;
QTcpSocket *socket; void init(); private slots:
void new_client();
void read_client_data();
void client_dis();
void show_error(QAbstractSocket::SocketError);
}; #endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <qDebug> Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this); init();
} Widget::~Widget()
{
delete ui;
} void Widget::init()
{
//初始化服务器server对象
server = new QTcpServer(this); //关联客户端连接信号newConnection
connect(server, SIGNAL(newConnection()), this, SLOT(new_client())); //连接客户端
//启动服务器监听
server->listen(QHostAddress::Any, 8888);
} void Widget::new_client()
{
qDebug() << "new_client here"; socket = server->nextPendingConnection();//与客户端通信的套接字 //关联接收客户端数据信号readyRead信号(客户端有数据就会发readyRead信号)
connect(socket, SIGNAL(readyRead()), this, SLOT(read_client_data()));
//检测掉线信号
connect(socket, SIGNAL(disconnected()), this, SLOT(client_dis()));
/* socket出错 -> 出错处理 */
connect(socket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(show_error(QAbstractSocket::SocketError)));
} void Widget::read_client_data()
{
qDebug() << "read_client_data here"; QTcpSocket *obj = (QTcpSocket*)sender(); //可实现多连接
QString msg = obj->readAll();
qDebug() << msg;
} void Widget::show_error(QAbstractSocket::SocketError)
{
qDebug() << "show_error here";
qDebug() << socket->errorString(); socket->close();
} void Widget::client_dis()
{
qDebug() << "client_dis here"; socket->close();
}

客户端

#ifndef WIDGET_H
#define WIDGET_H #include <QWidget>
#include <QAbstractSocket>
#include <QTcpSocket> namespace Ui {
class Widget;
} class Widget : public QWidget
{
Q_OBJECT public:
explicit Widget(QWidget *parent = 0);
~Widget(); private slots:
void start_transfer();
void continue_transfer(qint64);
void show_error(QAbstractSocket::SocketError);
void stop_transfer(); private:
Ui::Widget *ui;
QTcpSocket *socket; void init();
}; #endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QHostAddress> Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this); init();
} Widget::~Widget()
{
delete ui;
} void Widget::init()
{
socket = new QTcpSocket(this); socket->connectToHost(QHostAddress::LocalHost, 8888); /* 连接已建立 -> 开始发数据 */
connect(socket, SIGNAL(connected()),
this, SLOT(start_transfer()));
/* 数据已发出 -> 继续发 */
connect(socket, SIGNAL(bytesWritten(qint64)),
this, SLOT(continue_transfer(qint64)));
/* socket出错 -> 错误处理 */
connect(socket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(show_error(QAbstractSocket::SocketError)));
/* 检测掉线信号 */
connect(socket, SIGNAL(disconnected()), this, SLOT(stop_transfer()));
} void Widget::start_transfer()
{
qDebug() << "start_transfer here"; QString msg = "hello furong";
socket->write(msg.toUtf8());
} void Widget::continue_transfer(qint64 sentSize)
{
qDebug() << "continue_transfer sentSize" << sentSize; QString msg = "I love Y";
socket->write(msg.toUtf8()); socket->close();
} void Widget::show_error(QAbstractSocket::SocketError)
{
qDebug() << "show_error here"; socket->close();
} void Widget::stop_transfer()
{
qDebug() << "stop_transfer here";
}

Qt TCP通信的更多相关文章

  1. qt tcp 通信实例

    #include "mainwindow.h" #include "ui_mainwindow.h" #include <QHostAddress> ...

  2. QT实现TCP通信服务器端和客户端(支持多个客户端)精简版

    上星期接了个私活,工期两星期,报酬3000,写一个小软件,采集定向网络上的数据,并进行双向通信,捣鼓了两天,终于把QT中tcp通信这块调通了,找过N多例子,绝大部分都是基本的一个服务端一个客户端通信的 ...

  3. 套接字、UDP通信、TCP通信、TCP/IP协议簇

    一.套接字(socket) 1.英语单词socket:n.插座:穴:v.插入插座 2.套接字就是源IP地址和目的IP地址.源端口号和目的端口号的组合,是通过传输层进行通信的.IP指定电脑,端口指定某一 ...

  4. TCP通信

    //网络套接字编程实例,服务器端,TCP通信. #include <WinSock2.h> #pragma comment(lib,"ws2_32.lib") #inc ...

  5. 清晰易懂TCP通信原理解析(附demo、简易TCP通信库源码、解决沾包问题等)C#版

    目录 说明 TCP与UDP通信的特点 TCP中的沾包现象 自定义应用层协议 TCPLibrary通信库介绍 Demo演示 未完成功能 源码下载 说明 我前面博客中有多篇文章讲到了.NET中的网络编程, ...

  6. JAVASE02-Unit010: 多线程基础 、 TCP通信

    多线程基础 . TCP通信 * 当一个方法被synchronized修饰后,那么 * 该方法称为同步方法,即:多个线程不能同时 * 进入到方法内部执行. package day10; /** * 当多 ...

  7. 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)

    1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...

  8. NetworkComms V3 使用TCP通信传递IList<T>类型的数据

    客户端从服务器获取一组IList<T>类型的数据非常常见(通常从数据库中获取) 我们用NeworkComms V3来演示一下(NetworkcommsV2.x版本也同样支持) [ 使用pr ...

  9. [C语言]一个很实用的服务端和客户端进行TCP通信的实例

    本文给出一个很实用的服务端和客户端进行TCP通信的小例子.具体实现上非常简单,只是平时编写类似程序,具体步骤经常忘记,还要总是查,暂且将其记下来,方便以后参考. (1)客户端程序,编写一个文件clie ...

随机推荐

  1. HTML与CSS学习笔记(1)

    1.web三大核心技术? HTML CSS JavaScript 2.HTML基本机构和属性 HTML:超文本 标记 语言 超文本:文本内容+非文本内容(图片.视频.音频等) 标记:<单词> ...

  2. python 之Entry

    # Tkinter教程之Entry篇 # Entry用来输入单行文本 from tkinter import * root = Tk() # 创建entry Entry(root, text='inp ...

  3. 洛谷 U87052 一线天

    洛谷 U87052 一线天 题目传送门 题目背景 \(JDFZ\)即将举办第一届"一线天"趣味运动会...... 题目描述 "一线天"运动会在\(JLU\)南岭 ...

  4. nfs服务器共享存储

    NFS的使用: 主机   192.168.189.129 备份机 192.168.189.130 图文详解见:https://www.cnblogs.com/security-guard/Linux公 ...

  5. 【Step-By-Step】第 三 周

    本周面试题一览: 什么是XSS攻击,XSS 攻击可以分为哪几类?我们如何防范XSS攻击? 如何隐藏页面中的某个元素? 浏览器事件代理机制的原理是什么? setTimeout 倒计时为什么会出现误差? ...

  6. 洛谷P3232[HNOI2013]游走

    有一个无向简单连通图,顶点从 \(1\) 编号到 \(n\),边从 \(1\) 编号到 \(m\) 小Z在该图上进行随机游走,初始时小Z在\(1\)号顶点,每一步小Z以相等的概率随机选 择当前顶点的某 ...

  7. CF1151F Sonya and Informatics(概率期望,DP,矩阵快速幂)

    明明是水题结果没切掉……降智了…… 首先令 $c$ 为序列中 $0$ 的个数,那么排序后序列肯定是前面 $c$ 个 $0$,后面 $n-c$ 个 $1$. 那么就能上 DP 了.(居然卡在这里……) ...

  8. 编译安装php-fpm5.6 (centos 7)

    一.安装php-fpm依赖包 yum install -y make cmake gcc gcc-c++ autoconf automake libpng-devel libjpeg-devel zl ...

  9. 第01组 Beta冲刺(5/5)

    队名:007 组长博客: https://www.cnblogs.com/Linrrui/p/12031875.html 作业博客: https://edu.cnblogs.com/campus/fz ...

  10. HDU 3686 Traffic Real Time Query System(点双连通)

    题意 ​ 给定一张 \(n\) 个点 \(m\) 条边的无向图,\(q\) 次询问,每次询问两边之间的必经之点个数. 思路 ​ 求两点之间必经之边的个数用的是边双缩点,再求树上距离.而对比边双和点双之 ...