---->>>TCP编写实战的小项目

TCP套接字:主机(IP+端口) 和 服务器(IP+端口) 进行通讯,需要中间的一个锁套进行  啮合,这个锁套就是套接字的作用。

其中套接字的使用必须运用数数据流配合才可以。

第一种:不用套接字+不用数据流操作

//客户端发送信息

 void client::clientSendMessage ()

 {

     QByteArray data;

     data.append(ui->clientMessagelineEdit->text());

     tcp->write(data);

     ui->messagetextBrowser->insertPlainText (tr("send message: %1 \n").arg (QString(data)));

 }

第二种:使用套接字+使用数据流

void MainWindow::sendMessage()

{

   QByteArray block;//暂时存储我们需要发送的数据

   QDataStream out(&block,QIODevice::WriteOnly);//TCP必须和数据流一起使用

   out.setVersion(QDataStream::Qt_5_7);//设置数据流的版本(服务器和主机版本一定相同)

   out<<(quint16);//强制转化,quint16=unsigned short,向头部添加0为了开辟空间存放文件大小

   out << tr("");

   out.device()->seek();//向头添加数据,类似链表

   out <<(quint16)(block.size()-sizeof(quint16));//文件大小

   //*************利用“套接字”进行服务器和主机的连接和通讯****************//

   QTcpSocket *clientConnection = tcpServer->nextPendingConnection();

   connect(clientConnection,SIGNAL(disconnected()),//断开连接同时删除套接字

                  clientConnection,SLOT(deleteLater()));

   clientConnection->write(block);

   clientConnection->disconnectFromHost();//此函数关闭套接字触发disconnected()函数,接着由上面连接触发deleteLater()删除套接字

   ui->label_3->setText("successful sendmessage");

}

注释:1.校验的TCP(文件大小+文件信息+文件名+文件),通用的TCP(文件)。当写通用的时候应写后者,当自己使用时可以写前者保证数据准确性,但是一定保证接收端程序也应按照这个格式接受。

2.通用的软件没有数据流和套接字,自己写的软件都可以加。有数据流的TCP和没有数据流的TCP不能进行数据的传送!!!

QT编写TCP的问题的更多相关文章

  1. QT编写TCP入门+简单的实际项目(附源程序)

    我个人感觉学习QT不需要那么深入的了解,因为我就是编写一下界面来实现理想的功能而已,我不是靠这个吃饭,当然以后要是从事这个方向那就好好深入底层好好学了. 学习QT的TCP:第一步:去百度看看TCP的介 ...

  2. Qt编写图片及视频TCP/UDP网络传输

    一.前言 很多年前就做过类似的项目,无非就是将本地的图片上传到服务器,就这么简单,其实用http的post上传比较简单容易,无需自定义协议,直接设置好二进制数据即可,而采用TCP或者UDP通信的话,必 ...

  3. QT创建TCP Socket通信

    最近在学习QT,了解到QT可以进行SOCKET网络通信,进行学习,并建立一个简单的聊天DEMO.为了测试是否能与VS2012下的程序进行通信,在VS2012下建立一个客户端程序,进行通信测试,发现可以 ...

  4. Qt编写的开源帖子集合(懒人专用)

    回顾自己学习Qt以来九年了,在这九年多时间里面,从本论坛学习不到不少的东西,今天特意整了一下自己开源过的资源的帖子,整理一起方便大家直接跳转下载,不统计不知道,一统计吓一跳,不知不觉开源了这么多代码, ...

  5. Qt基于tcp协议网络编程

    基于Qt网络编程: 基于tcp协议 c/s模式编程 所需要的类:QTcpServer QTcpSocket 利用qt基于tcp协议编写c/s模式程序: 两个类中的信号: QTcpServer : ne ...

  6. Qt编写项目作品大全(自定义控件+输入法+大屏电子看板+视频监控+楼宇对讲+气体安全等)

    一.自定义控件大全 (一).控件介绍 超过160个精美控件,涵盖了各种仪表盘.进度条.进度球.指南针.曲线图.标尺.温度计.导航条.导航栏,flatui.高亮按钮.滑动选择器.农历等.远超qwt集成的 ...

  7. Qt编写控件属性设计器8-网络采集

    一.前言 上一篇文章已经打通了数据源之一的串口采集,这次要说的是网络采集,网络通信目前用的最多的是三种,TCP/UDP/HTTP,其中tcp通信又包括了客户端服务端两种,tcp通信才用了多次握手机制不 ...

  8. Qt编写自定义控件二动画按钮

    现在的web发展越来越快,很多流行的布局样式,都是从web开始的,写惯了Qt widgets 项目,很多时候想改进一下现有的人机交互,尤其是在现有的按钮上加一些动画的效果,例如鼠标移上去变大,移开还原 ...

  9. Qt编写可换肤的中文双拼汉字输入法

    时间过得真快,不知不觉已到2015年,农历春节一眨眼就过去了,端正状态收拾心情整装待发出发. 曾经有段时间,我有一个很执着的梦想,我要导演出一部空前绝后的巨幕.不过现实无情地碾碎我的梦想,也同时将我推 ...

随机推荐

  1. Redis 键命令

    1.设置key值 set name zhangsan 删除key del name 2. 判断key是否存在 exists a,返回1 说明存在:  0 表示不存在 3. 剩余过期时间 ttl 返回- ...

  2. Ubuntu Nginx Ruby, Rails Mysql 安装

    1. Nginx 安装 sudo apt-get install nginx 2. Ruby 安装 sudo apt-get install ruby 查看版本 ruby -v 3. Rails 安装 ...

  3. Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(

    application.class要放在根目录下,否则会发生以下错误

  4. 基于mysql对mybatis中的foreach进行深入研究

    鉴于上一篇博文一次修改mysql字段类型引发的技术探究提到的,要对foreach里面的collection相关的内容做一些介绍,今天就围绕foreach,做一些数据插入和查询相关的研究. 首先介绍一下 ...

  5. 回看《例说FPGA》---DDR2控制器集成与读写测试

    回看<例说FPGA> ---DDR2控制器集成与读写测试 1.DDR2 IP核的配置 需要弄清楚的选项主要有: PLL reference clock frequency Memory c ...

  6. js 实现滚动字幕

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 自定义自己的jQury插件

    对于一个商业插件来说,自定义插件的样式是必不可少的.我们可以通过我们自己输入不同的样式,来改变开发者的默认样式.比如说最常见的 width.height.url.color等等.要是没有这些自定义的东 ...

  8. List<T>Distinct 过滤

    public class TestDuplicateDefine : IEqualityComparer<student> { public bool Equals(student x, ...

  9. Windows Azure Virtual Machine (36) 扩展Azure ARM VM的磁盘大小

    <Windows Azure Platform 系列文章目录> 在默认情况下,Azure ARM VM的操作系统磁盘(OS Disk),容量为: (1)Windows VM OS Disk ...

  10. table 设置每列的颜色

    ISBN Title Price 3476896 My first HTML $53 5869207 My first CSS $49   <!DOCTYPE html> <html ...