QTcpSocket类和QTcpServer类
QTcpSocket 详细描述:
QTcpSocket 类提供一个TCP套接字
TCP是一个面向连接,可靠的的通信协议,非常适合于连续不断的数据传递
QTcpSocket 是QAbstractSocket类非常方便的一个子类,让你创建一个TCP连接和数据流交流。
注意:TCP套接字不能以QIODevice::Unbuffered模式来打开
在Symbian系统上,程序想用这个类的话必须拥有NetworkServices平台支持,如果客户机缺少这个能力,将会导致"恐惧"(不明白为什么这么翻译)
成员函数:
QTcpSocket::QTcpSocket ( QObject * parent = 0 )
以UnconnectedState态创建一个QTcpSocket对象
QTcpSocket::~QTcpSocket () [virtual]‘
析构函数,销毁对象
QTcpServer类
提供一个TCP基础服务类 继承自QObject
这个类用来接收到来的TCP连接,可以指定TCP端口或者用QTcpServer自己挑选一个端口,可以监听一个指定的地址或者所有的机器地址。
调用listen()来监听所有的连接,每当一个新的客户端连接到服务端就会发射信号newConnection()
调用nextPendingConnection()来接受待处理的连接。返回一个连接的QTcpSocket(),我们可以用这个返回的套接字和客户端进行连接
如果有错误,serverError()返回错误的类型。调用errorString()来把错误打印出来。
当监听连接时候,可以调用serverAddress()和serverPort()来返回服务端的地址和端口。
调用close()来关闭套接字,停止对连接的监听。‘
尽管QTcpServer大多时候设计使用事件循环,也可以不适用事件循环,可以使用waitForNewConnection(),会一直阻塞,知道一个连接可以用或者超时。
在Symbian平台上,同样的需要NetworkServices平台支持。
成员函数
------------------------------
void close() 关闭服务,然后服务器讲不再监听任何连接
QString errorString()const 错误时候返回错误的字符串
------------------------------
bool hasPendingConnections()const 如果服务端有一个待处理的连接,就返回真,否则返回假
QTcpSocket* nextPendingConnection()
返回一个套接字来处理一个连接,这个套接字作为服务端的一个子对象,意味着当QTcpServer对象销毁时候,这个套接字也自动删除,当使用完后明确的删除这个套接字也好,这样可以避免内存浪费。当没有可处理的连接时候,这个函数返回0。
注意:返回的套接字不能再其他线程中使用。如果想在其他线程中使用,那么你需要重载incomingConnection()
-------------------------------------
void incomingConnection(int socketDescriptor)[virtualprotected]
当QTcpServer有一个新连接时候调用这个虚函数,socketDescriptor参数是新连接的套接字描述符
这个函数新建一个QTcpSocket套接字,建立套接字描述符,然后存储套接字在一个整形的待连接链表中。最后发射信号newConnection()
重写这个函数,当一个新连接时候,来调整这个函数的行为。
当服务端使用QNetworkProxy服务器代理时候,使用一般的套接字函数套接字描述符可能不可以用,这时候应该使用 QTcpSocket::setSocketDescriptor()来设置描述符
--------------------------------------
bool isListening()const
当服务端正在监听连接时候返回真,否则返回假
bool listen( const QHostAddress & address =QHostAddress::Any, quint16 port = 0 )
告诉服务端监听所有来自地址为address端口为Port的连接,如果Port为0,那么会自动选择,如果address是QHostAddress::Any,那么服务端监听所有连接,成功返回1,否则返回0
int maxPendingConnections()const
返回最大允许连接数。默认是30
void setMaxPendingConnections(int numConnections)
设定待处理的连接最大数目为numConnections,当超过了最大连接数后,客户端仍旧可以连接服务端,但是服务端不在接受连接,操作系统会把这些链接保存在一个队列中。
-----------------------------------------
QNetworkProxy proxy()const
返回这个套接字的网络代理层。
void setProxy(const QNetworkProxy & networkProxy)
设置这个套接字的网络代理层,进制使用代理时候,使用QNetworkProxy::NoProxy类型,例如server->setProxy(QNetworkProxy::NoProxy);
quint16serverPort()const serverAddress()
当服务端正在监听时候,返回服务端的端口和地址
-----------------------------------------
bool waitForNewConnection(int msec=0,bool *timedOut=0)
最大等待msec毫秒或者等待一个新连接可用。如果一个连接可用,返回真,否则返回假。如果msec不等于0,那么超时将会被调用
这是一个阻塞函数,最好用在单线程应用程序中。由于会阻塞。当没有事件循环可用时候,这个函数很好用。
非阻塞的选项和信号newConnection()关联起来。
当msec为-1时候,函数将没有超时。
http://blog.csdn.net/cateatapple/article/details/40824977
Qt中的QTcpSocket类的write()方法不能发送数据的解决方法
在客户端打算用QTcpSocket的一个对象给服务器发消息的,但是每次都连接上,就是发送不出去。
后来在使用完write()方法后,再使用flush()方法,就可一发送消息了。
qt的官方文档里说,调用了flush()方法后,可以把缓冲的数据立刻发送出去。所以我估计QTcpSocket中的write()方法是带有缓冲的。
http://blog.csdn.net/cateatapple/article/details/40824907
QTcpSocket类和QTcpServer类的更多相关文章
- JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- 【转】UML类图与类的关系详解
UML类图与类的关系详解 2011-04-21 来源:网络 在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Realization).依赖(D ...
- Java如何解决脆弱基类(基类被冻结)问题
概述 大多数好的设计者象躲避瘟疫一样来避免使用实现继承(extends 关系).实际上80%的代码应该完全用interfaces写,而不是通过extends.“JAVA设计模式”一书详细阐述了怎样用 ...
- 类A have-a 类B,类B访问类A public 成员
需求是类A中包含类B,而类B又需要访问类A的public属性的成员. 首先类B中要访问类A的属性,那么对于类B而言,我们必须要知道有类A这个类,所以在类B的具体实现之前我们需要前向声明类A. 对于类A ...
- UML(一) 类图及类间关系
原创文章,同步发自作者个人博客,http://www.jasongj.com/uml/class_diagram/ UML类图 UML类图介绍 在UML 2.*的13种图形中,类图是使用频率最高的UM ...
- JAVA正则表达式:Pattern类与Matcher类详解(转)
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表 ...
- C# 根据类名称创建类示例
//获得类所在的程序集名称(此处我选择当前程序集) string bllName = System.IO.Path.GetFileNameWithoutExtension(System.Reflect ...
- 使用date类和format类对系统当前时间进行格式化显示
一:Date------------String 代码1:(代码二对显示出来的时间格式进行优化) package DateDemo; import java.text.SimpleDateFormat ...
- java中的 FileWriter类 和 FileReader类的一些基本用法
1,FileWriter类(字符输出流类) |--用来写入字符文件的便捷类.此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的.要自己指定这些值,可以先在 FileOutputStream ...
随机推荐
- Qt写入unicode编码格式的文本(用QChar写入BOM标记,并且列出所有Qt支持的字符集)
1.文本流设置unicode小端模式 2.写入文本前两个字节FF FE 3.字符串转成unicode编码 QList<QByteArray> list = QTextCodec::avai ...
- 关于hexo的SEO的好文章
1.hexo高阶教程:想让你的博客被更多的人在搜索引擎中搜到吗? 2.Hexo Seo优化让你的博客在google搜索排名第一 3.hexo 博客 seo 优化 4.HEXO SEO 高级优化 5.H ...
- iOS项目double、float精度丢失解决办法
描述 在iOS项目中老是遇到double.float精度丢失的问题 PS: NSString * jsonStr = @"{\"9.70\":9.70,\"67 ...
- 关闭Wind XP/Vista/Win7的DEP数据执行保护汇总(转)
数据执行保护 (DEP) 是一种Windows安全机制,从Windows版本顺序上看是从Windows XP SP2开始引入,通过监视程序以确保它们使用的系统内存是安全的,帮助防止操作系统受到病毒和其 ...
- jQuery.noop
一个空函数 当你仅仅想要传递一个空函数的时候,就用他吧.这对一些插件作者很有用,当插件提供了一个可选的回调函数接口,那么如果调用的时候没有传递这个回调函数,就用jQuery.noop来代替执行.
- Leetcode 617 Merge Two Binary Trees 二叉树
题意: 给定两棵树,将两棵树合并成一颗树 输入 Tree 1 Tree 2 1 2 / \ / \ 3 2 1 3 / \ \ 5 4 7 输出 合并的树 3 / \ 4 5 / \ \ 5 4 7 ...
- kill the lock
$ killall -s 9 krunner_lock [ZT][From:] http://www.commandlinefu.com/commands/view/2264/unlock-your- ...
- NAT对于网络上的其它人都不可见(但可以转发端口),Bridged和网络里的其它物理机没区别,Internal只能在虚拟机之间可见,Host-only只对主机可见(最符合我的服务器需求),最多可设置8块网卡实现混杂
VirtualBox 可以为每一个虚拟机分配8个网卡.每一个网卡的连接方式可以选为下列之一: Not attached Network Address Translation (NAT) Bridge ...
- 关于FileZilla上传文件后服务器端文件与本地文件大小不一致的解决方法
最近在调试网站时发现,通过ftp上传工具FileZilla上传至服务器端的文件与本地文件大小不一致,虽然没有影响网站的最终显示效果,但仍让我困惑不解.后发现是传输类型的原因,解决方法如下: 中文版Fi ...
- OpenCV 图像白平衡算法(相机自动白平衡)
彩色相机内部有三个CCD电子耦合元件,分别用来感受红绿蓝三中颜色的光线,默认情况下,三个颜色的感光电路信号的放大比例是1:1:1的.在理想的拍摄环境下,纯白色的RGB分量按照1:1:1的比例放大之后, ...