当前位置: 首页 > news >正文

公司设计网站有什么好处东莞谢岗网站建设

公司设计网站有什么好处,东莞谢岗网站建设,手机网站自适应屏幕,重庆网站建设公司多少钱Qt 给用户提供了网络编程的接口#xff0c;包括TCP、UDP、HTTP三种协议的API以及各种类#xff0c;可以了解一下。 而在 QT 中想要使用网络编程#xff0c;必须在pro文件中添加 network 模块#xff0c;否则无法包含网络编程所需的头文件。 UDP UDP是传输层的协议#…Qt 给用户提供了网络编程的接口包括TCP、UDP、HTTP三种协议的API以及各种类可以了解一下。 而在 QT 中想要使用网络编程必须在pro文件中添加 network 模块否则无法包含网络编程所需的头文件。 UDP UDP是传输层的协议该协议是无输出不可靠面向数据包全双工的通信协议。 QT为 UDP 协议专门设置了两个类QUdpSocket 以及 QNetworkDatagram 。 QUdpSocket类 该类是专门用于 Udp 的类包含 Udp 协议所需的绑定、接收数据包、发送数据包等API。 bind(const QHostAddress,quint16)函数绑定端口号类似linux中的bindreceiveDatagram()函数返回一个 QNetworkDatagram类型的数据包类似linux中的recvfromwriteDatagram()函数发送一个QNetworkDatagram类型的数据包类型linux中的sendtoreadyRead信号当一个端口号可以读取时即可触发该信号类似linux中的多路转接select、poll和epoll等 QNetworkDatagram 该类表明一个数据包可以从该类所实例化的对象中读取所需的数据、发送端的端口号和 ip 地址 QNetworkDatagram(const QByteArray,const QHostAddress,quint16)方法QNetworkDatagram的构造函数用于创建一个对象data()方法获取数据包中的数据返回一个 QByteArray 对象sederAddress方法获取数据包发送者的 IP 地址sederPort()方法获取数据包发送者的 端口号 和Linux不同的是linux的接收和发送函数recvfrom 和 sendto 它们都需要一个  sockaddr 的结构体对象来获取发送端的 IP 地址和端口号而QT则是将其拆开数据包中直接包含对端的IP地址和端口号 UDP回显服务器 首先写服务器的代码在 pro 文件添加 network 模块后即可使用上述API。 在服务器一侧我们使用 listWidget 控件用来显示所有接收的数据。  然后在头文件中添加 QUdpSocket 对象用来后续接收客户端的消息。  然后在构造函数中我们初始化 socket 后需要先进行信号槽绑定然后再进行端口号绑定。 必须先进行信号槽绑定再进行端口号绑定这是为了防止如果有客户端发起请求了但是信号槽函数未绑定导致该请求丢失的情况。 然后再写好槽函数写好接收和显示逻辑。 UDP回显客户端 同样的在pro文件中添加network模块后即可使用UDP的API。 客户端需要发送数据和接收数据因此除了 listWidget 来显示数据之外还需要 lineEidt 和 pushbutton 两个控件分别用来输入数据和发送数据。 在头文件中添加控件的槽函数其他和Server一样。 而在构造函数中除了初始化 socket 之外还需要绑定 readyRead 信号和process槽函数因为客户端也需要接收服务器发送的数据。  而pushButton 的槽函数就需要先从 lineEdit 中读取文件然后再创建一个 QNetworkDatagram 对象用来发送数据该数据包必须包含服务器的 IP 地址和 端口号。 而接收服务器发送的数据就直接显示在 listWidget 上。  可以看到成功的发送和接收到数据了。 TCP TCP是一个可靠、面向连接、面向字节流、全双工的传输层协议它的API稍微比UDP复杂但是也很简单。 其核心类有两个QTcpServer 和 QTcpSocket。 QTcpServer 该类专门用于监听端口和获取客户端连接。 listen(const QHostAddress,quint16)方法绑定指定的端口号和IP地址并且启动监听类似linx中的bind和listen的结合体nextPendingConnection()方法 从系统中获取一个已经建立好的tcp连接返回一个 QTcpSocket 对象。 通过该对象可以进行通信 类似linux 中的 acceptnewConnection信号有新的客户端建立好连接后即触发在linux中类似多路转接的通知机制 QTcpSocket 和 QUdpSocket 类似该类用于进程间通信。 readAll()方法 读取接收缓冲区的所有数据 返回一个 QByteArray 对象 类似linux中的readwrite(const QByteArray )方法把数据写入 socket 对象中类似linux的writedeleteLater方法将该 socket 对象设为无效在下一次事件循环中析构该对象类似 java 中的自动回收机制不过我们这里是半自动的connectToHost(const QHostAddress,quint16)方法向服务器发送连接请求进行三次握手操作类似 linux 中的 connect 函数readyRead信号有数据到达并准备时触发类似多路复用disconnected信号当断开连接时触发类似多路复用 通过上面两个类可以实现 TCP 的回显服务器。 TCP回显服务器 和 UDP 的服务器一样直接用一个 listWidget 用来显示所有数据。  在头文件上设置好 QTcpServer 对象和槽函数。  将 QTcpServer 的 newConnection 信号和对应的槽函数绑定然后启动监听。 当一个客户端发起链接时分未三个部分。 获取客户端的连接并显示有客户端上线绑定 readyRead 和 对应的槽函数此处用的 lambda 表达式绑定 disconnected 和 对应的槽函数  无论是客户端上线、还是接收到数据、又或者是断开连接都会在 listWidget 上显示出来。 而 process 函数则是单纯的返回一个相同的QString罢了。  TCP回显客户端  和 UDP 回显客户端一样采用 listWidget、lineEdit、pushButton 三个控件。  头文件中添加 QTcpSocket 类和 pushButton 对应的槽函数。  而在构造函数中除了初始化 socket 之外还需要将 socket 的 readyRead 信号和槽函数绑定在一起用来显示在 listWidget 中。此外还需要通过 connectToHost 来和服务器建立连接 。 此外由于客户端还需要接收服务器发送的数据因此也需要绑定函数。 而pushButton的槽函数则直接读取 lineEdit 上的文本并且发送和服务器。  能够发现确实进行了互相通信。 不过让我们回忆下 linux 中我们是如何使用 TCP 进行通信的 当一个客户端进行请求时就为该客户端创建一个线程在线程中进行管理但是我们这里的QT明显不是这样的这是为什么呢实际上那是因为 代码缺陷 linux中采用的是双层循环方式当一个客户端建立连接那么直到客户端断开连接之前服务器一直都会在内层循环中阻塞无法到达 accept 中去只能通过多线程的方式进行。  而 QT 自带信号槽机制就很好的解决了这个问题当有信号发生时才去处理而 linux 除非采用 epoll 来将处理之外基本只能通过多线程解决。 HTTP Client 实际上一个服务器不太可能采用图形化界面的因此实际上 TCP 和 UDP 都使用的很少。 QT 中使用最多的是 HTTP。 QT 提供三个类用于和 HTTP 进行请求和获取操作。 QNetworkAccessManagerQNetworkRequestQNetworkReply  QNetworkAccessManager 该类提供 HTTP 的核心操作。 方法说明get(const QNetworkRequest)以get 的方式发送一个请求post(const QNetworkRequest,const QByteArray)以 post 的方式发送一个请求 当然HTTP 有很多操作比如delete、head之类的不过这里就不一一赘述了。 QNetworkRequest 该类表示一个 Http 请求不包含body 如果使用 post 发送一个带有 body 的请求则需要另外单独的参数来传入 body。 方法说明QNetworkRequest(const QUrl)通过 URL 构造一个 HTTP 请求setHeader(QNetworkRequest::KnownHeaders header, const QVariant value)      设置请求头 其中这个 setHeader 的 KnownHeader 是一个枚举类型包括以下类型。 值说明ContentTypeHeader描述body 类型ContentLengthHeader描述 body 长度LocationHeader用于重定向报文中指定重定向地址响应才会用到CookieHeader设置 cookieUserAgentHeader设置 User-Agent 选择了某一个枚举类型后 value 就必须是枚举类型对应的说明比如如果选择的ContentTypeHeader那么 value 就需要在 http Body 的四种格式form-datax-www-from-urlencodedrawbinary 中选一个了。 QNetworkReply 这是 Http 的响应它是 QIODevice 的子类 名称类型说明error()方法获取出错状态errorString()方法获取出错原因的文本readAll()方法读取响应文本header(QNetworkRequest::KnownHeaders header)方法读取响应指定header 的值finished信号客户端收到完整的响应数据后触发 接着我们来试着使用这些API 来获取一个响应。 首先采用 plainTextEdit、lineEdit、pushButton 三个控件。 头文件中新增 QNetworkAccessManager 对象。  然后在构造函数中初始化 manager。  而pushButton的槽函数中我们需要按顺序来发送请求。 首先是通过获取在 lineEdit 中的 文本并且构建一个 url。 然后通过 url 来创建一个请求最后通过 get 方法来发送请求并且获取一个响应。 如果该响应已经接收完所有数据后就进入响应绑定的槽函数中将响应显示在 plainTextEdit 上  可以看到确实是获取到了响应。
http://www.w-s-a.com/news/970583/

相关文章:

  • 宽屏网站mysqli pdo wordpress
  • 2022年没封网站直接进入赣州网吧
  • 河南省建设厅证件证件查询网站硬件开发是什么意思
  • tp5做企业网站宿迁房产网租房信息
  • php高级网站开发wordpress不能添加文章
  • 小学校园网站建设付费阅读下载网站开发
  • 如何做招聘网站网站建设中 敬请期待
  • 雅安工程交易建设网站做vip电影网站
  • 网站建设方维网站标题title为什么不能频繁的改
  • 网站建设如何上传文件wordpress列表自定义数据表
  • 摄影课程自学网站科技项目的类型有
  • 未来最紧缺的十大专业长春seo顾问
  • 为什么点不开网站公关公司是做什么的
  • wordpress主要菜单如何对网站页面进行优化
  • 建设银行深分行圳招聘网站建立互联网公司网站
  • 湖南做旅游网站哪家最好html5手机网站免费模板
  • 云服务器上放多个网站wordpress ping大全
  • 以下属于网站的管理 更新 维护如何才能做好品牌网站建设
  • 国家工业和信息化部网站备案系统网站建设设计费用
  • 网站建设利弊宁波高端网站建设联系方式
  • 网站订票策划方案郑州代做网站
  • 免费的网站加速器注册公司邮箱
  • 千助网站建设网站整站程序
  • 自学建网站做网站优化访问网站出现目录
  • 济南网站建设是什么百度官网登录入口手机版
  • net快速建站西宁手机网站建设
  • 网站浏览器不兼容怎么办软件系统开发大概多少钱
  • 网站建设哪个公司最好shift wordpress
  • 公司网站建设功能介绍室内设计学习
  • 做网站策划容易遇到哪些问题沈阳公司网站制作