使用Qt编写服务器端程序(包括Http传输服务器端)的方法
使用Qt编写客户端的程序的示例或demo较多,但是编写服务器端程序的demo很少。当然,服务器端的程序一般不需要带界面,这点我们可以理解。不过有些时候我们还是需要使用Qt编写一个简单的测试用的服务器代码,这时候该怎么处理呢?
首先,头文件中需要做这两个对象:
QTcpServer * serverListen;
QTcpSocket *serverConnect;
其中,serverListen主要是用来监听的,这是QTcpServer类特有的一些功能。而serverConnect是和客户端程序一样的一个QTcpSocket类的对象,是在我们完成了监听任务之后,将连接交给这个对象,由它来完成数据传输的工作。
.cpp中就开始监听了:
serverListen->listen(QHostAddress::Any,port);
connect(serverListen,SIGNAL(newConnection()),this,SLOT(acceptConnection()));
监听的时候我们可以在指定端口上监听任意ip段的连接。
connect语句中,信号是serverListen中自带的,槽函数是我们自定义的。当有客户端程序连接到来的时候对应的槽函数自动被调用。
槽函数中我们主要做的是:
serverConnect = serverListen->nextPendingConnection();
connect(serverConnect,SIGNAL(readyRead()),this,SLOT(dealMessage()));
connect(serverConnect, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(displayError(QAbstractSocket::SocketError)));
使用nextPendingConnection( )函数将当前的这个网络连接交给我的QTcpSocket对象,从这里开始往后所有网络传输的工作都使用它来完成了,就是说我的QTcpServer类的对象,只完成一个监听的功能就算是光荣完成任务了,之后的事情就不需要再管了。如果只需要做一次连接,甚至可以将其close掉。
第一个connect,信号仍然是自带的,有数据从网络连接上到来的时候该信号自动被发出。槽函数是自定义的,在这个槽函数里面我们读取来自网络连接上的数据。
第二个connect不是必须的。其中信号仍然是自带的,槽函数是我们自定义的,主要是用来处理一些网络传输时的错误,可以弹出一些messagebox来做提示。
在dealMessage槽函数里面,主要做这件事:
if (serverConnect->canReadLine())
QByteArray infoFromClient = serverConnect->readAll();
来获取网络上传来的数据。
如果想要发送数据,可以这样:
QTextStream os(tcpServer);
os << dataToClient;
tcpServer->close();
很简单吧。
当然,这只是一个基本的收发数据的处理,更复杂的内容则需要加入更多的逻辑来控制了。
如果是Http协议下的server,其实道理也是一样,只是客户端使用http协议传过来的数据的格式可能不大一样,多了一个文件头。
或许可以使用HttpHead之类的类相关的函数去读,但如果只是简单的协议,可以这样:
QString info(infoFromClient);
QStringList tokens(info.split( QRegExp(“[ /r/n][ /r/n]*”)));
if ( tokens[0] == “GET” )
getDeal(serverConnect);
if( tokens[0] == “POST”)
postDeal(serverConnect);
这里就是取个巧,http协议中,如果是post方式,我们把收到的数据按/r/n的方式打散,第一个string肯定要么是GET要么是POST了。这样就知道客户端想要干嘛了。如果协议中还有其它的内容,都可以从我们打散后的list中获取到。
http://love.junzimu.com/archives/2669
使用Qt编写服务器端程序(包括Http传输服务器端)的方法的更多相关文章
- linux下对qt编写的程序进行部署
当我们完成程序设计之后,需要将可执行程序交付客户,而运行环境里面可能是没有相关支持库的,这个时候就涉及到部署的相关问题.对于我们在Linux下基于QT编写的图像处理程序,我们采用linuxdeploy ...
- 编写python程序和运行.py文件的方法步骤
前提:已安装好 Subliume Test 3 且已经添加好python编译系统,已安装好python3.7 一.新建一个文本文档,将后缀名改为.py 二.使用 Subliume Test 3 打开该 ...
- MAC 平台 QT编写iphone程序,加载iphone模拟器失败解决办法
本日这么多年一直做C++开发,最近要做QT项目,被QT做界面的新特性所吸引.QSS QML的确是亮点. 还有一个就是跨平台这方面,自己玩了玩. 用的QT 的开发包是在官网上下载 qt-opensour ...
- 关于在Qt里让程序休眠一段时间的方法总结
出处:http://hanzhaoxin.cnblogs.com/ Qt 为何没有提供 Sleep 论坛上不时见到有人问: Qt 为什么没有提供跨平台的 sleep 函数? 使用平台相关的 Sleep ...
- 编写Java程序,通过给定可变参数方法,计算任意给定的多个int类型数据之和
返回本章节 返回作业目录 需求说明: 通过给定可变参数方法,计算任意给定的多个int类型数据之和. 实现思路: 定义可变形参方法,参数类型是int类型. 定义变量 sum 接受最终的和. 通过 for ...
- Windows下用VC与QT编译MPI程序入门
MPI是信息传递接口的简称,常用来进行进程间.机器间的通信与并行计算.一般而言,MPI都会部署在*nix系统下,在Windows下面直接编译.配置MPI并不容易.本文利用MS提供的编译好的MPI的版本 ...
- ubuntu开机自动运行用Qt写的程序
这里介绍一种在ubuntu系统开机自动运行使用Qt编写的程序的方法.首先要注意要自动运行Qt编的程序,不需要先打开Qt,而是直接运行编译好的与工程名同名的可执行文件即可,比如我要运行的工程为QRDec ...
- 使用Qt编写模块化插件式应用程序
动态链接库技术使软件工程师们兽血沸腾,它使得应用系统(程序)可以以二进制模块的形式灵活地组建起来.比起源码级别的模块化,二进制级别的模块划分使得各模块更加独立,各模块可以分别编译和链接,模块的升级不会 ...
- java基础,继承类题目:编写一个Java应用程序,该程序包括3个类:Monkey类、People类和主类 E
21.编写一个Java应用程序,该程序包括3个类:Monkey类.People类和主类 E.要求: (1) Monkey类中有个构造方法:Monkey (String s),并且有个public vo ...
随机推荐
- Codeforces 486D D. Valid Sets
http://codeforces.com/contest/486/problem/D 题意:给定一棵树,点上有权值,以及d,要求有多少种联通块满足最大值减最小值小于等于d. 思路:枚举i作为最大的点 ...
- 搜索Collections元素,用DateFormatSymbols 获得月份
import java.util.Collections; import java.util.List; import java.text.DateFormatSymbols; import java ...
- 商派shopex
http://www.shopex.cn/48release/shopexsingle_exper.php 在线体验 前台体验:http://demo.shopex.com.cn/485 后台体验:h ...
- 需要考虑的9个SEO实践
搜索引擎优化重要吗?我们知道,网站设计是把屏幕上平淡无奇变成令人愉快的美感,更直观地辨认信息.这也是人与人之间在沟通想法,这样的方式一直在演变. 穴居人拥有洞穴壁画,古埃及人有象形文字,现代人有网页设 ...
- apacheOfbiz
一.ofbiz 用自身数据库安装 1. 由 binary 安装: 由 binary 安装非常简单, 以下是安装方法: 下载ofbiz-2.0-beta1-complete.tar.gz, 注意不是of ...
- oracle 12g sqlplus安装
一.下载oracle 12g sqlplus软件 linux 64位操作系统,oracle安装包地址 http://www.oracle.com/technetwork/topics/linuxx86 ...
- windows10 离线包安装net3.5
找到离线镜像: 管理员命令行运行:dism.exe /online /enable-feature /featurename:netfx3 /Source:E:\sources\sxs 路径根据实际情 ...
- Android应用程序安装过程源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6766010 Android系统在启动的过程中, ...
- Git 笔记二-Git安装与初始配置
git 笔记二-Git安装与初始配置 Git的安装 由于我日常生活和工作基本上都是在Windows上,因此此处只说windows上的安装.Windows上的安装和其他程序一样,只需要到http://g ...
- ASP.NET内核几大对象、ASP.NET核心知识(6)--转载
这篇博文主要介绍一下几个对象. 1)HttpContext 2)HttpRequest 3)HttpResponse 4)context. Server 5)context.Session HttpC ...