服务器端:QTcpServer
QT 网络编程(1)
原创
©著作权归作者所有:来自51CTO博客作者wzwqy的原创作品,请联系作者获取转载授权,否则将追究法律责任
【1】基本用法:创建一个QTcpServer,然后调用listen函数监听相应的地址和端口。当有客户端链接到服务器时,会有信号newConnection()产生。调用nextPendingConnection()接受一个挂起的TcpSocket连接,该函数返回一个指向QTcpSocket的指针,同时进入到QAbstractSocket::ConnectedState状态。这样就可以和客户端进行通信了。
如果错误发生,可以用函数serverError()返回错误类型,用errorString()返回错误提示字符串。
调用close使得QTcpServer停止监听连接请求。尽管QTcpServer使用了事件循环,但是可以不这么使用。利用waitForNewConnection(),该函数阻塞直到有连接可用或者时间超时。
【2】重要函数:
void incomingConnection (int socketDescriptor); 当一个连接可以用时,QTcpServer调用该函数。其基本过程是现创建一个QTcpSocket,设置描述符和保存到列表,最后发送newConnection() 事件消息。
QTcpSocket* QTcpServer::nextPendingConnection();返回下一个将要连接的QTcpSocket对象,该返回对象是QTcpServer的子对象,意味着如果删除了QTcpSServer,则删除了该对象。也可以在你不需要该对象时,将他删除掉,以免占用内存。
客户端:QTcpSocket,QAbstractSocket
【1】基本用法:在客户端创建一个QTcpSocket,然后用connectToHost函数向对应的主机和端口建立连接。任何时候,可以用state()查询状态,初始为UnconnectedState,然后调用连接函数之后,HostLookupState,如果连接成功进入ConnectedState,并且发送hostFound()信号。当连接建立,发送connected(),在任何状态下如果在错误发生error()信号发送。状态改变发送stateChanged()信号。如果QTcpSocket准备好可读可写,则isValid() 函数范围为真。
用read()和write()来读写,或者使用readLine()和readAll.当有数据到来的时候,系统会发送readyRead()信号。bytesAvailable()返回包的字节数,如果你不是一次性读完数据,新的数据包到来的时候将会附加到内部读缓存后面。setReadBufferSize()可以设置读缓存的大小。
用disconnectFromHost()关闭连接,进入ClosingState。当所有数据写入到socket,QAbstractSocket会关闭该台socket,同时发送disconnected()消息。如果想立即终止一个连接,放弃数据发送,调用abort().如果远程主机关闭连接,QAbstractSocket发送QAbstractSocket::RemoteHostClosedError错误,但是状态还停留在ConnectedState,然后发送disconnected()信号。
QAbstractSocket提供几个函数用来挂起调用线程,知道一定的信号发送,这些函数可以用来阻塞socket:
waitForConnected() 阻塞知道一个连接建立。
waitForReadyRead() 阻塞知道有新的数据可以读取。
waitForBytesWritten() 阻塞直到发送数据写道socket中。
waitForDisconnected() 阻塞知道链接关闭。
下一篇:XP 安装Ubuntu12.4
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
网络编程1 初识网络编程
1.客户端&服务端架构(C/S) 2.网络通信的整个流程 3.初识socket(重点)
服务端架构 客户端 网络通信 -
QT网络编程开发客户端
上一篇: QT网络编程开发服务端.文章目录基
#include 客户端 ipad -
QT网络编程开发服务端
文章目录基于Qt的网络编程服务端QTcpServer配置liste以.
客户端 #include 服务端 -
Qt: 网络编程之UDP(理论+实例)
Qt: 网络编程之UDP(理论+实例)。
Qt 网络编程 UDP 理论 实例 -
qt 网络编程参考资料数据 加锁 javascript linux c++