zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    线上故障排查 | 烂代码引发的血案
    源码分析系列 | 从零开始写MVC框架
    (原创干货)市场、销售-日常思考实战框架学习第三天
    (原创干货)企业管理-日常思考实战框架学习第二天
    (原创干货)人事管理-日常思考实战框架学习第一天
    带你认识物理机服务器(非原创)
    JSP高级功能-java之JSP学习第三天(非原创)
    常见指令与功能介绍-java之JSP学习第二天(非原创)
    JSP介绍与语法-java之JSP学习第一天(非原创)
    java之properties和yml两种配置文件比较(非原创)
  • 原文地址:https://www.cnblogs.com/findumars/p/6371246.html
Copyright © 2011-2022 走看看