⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qsocket.html

📁 QT参考文档
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- /home/reggie/tmp/qt-3.0-reggie-5401/qt-x11-commercial-3.0.5/src/network/qsocket.cpp:113 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Translator" content="Cavendish">
<meta name="Qt zh_CN Documents Website" content="http://www.qiliang.net/qt">
<title>QSocket类</title>
<style type="text/css"><!--
h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
body { background: #ffffff; color: black; font-family: "Times New Roman" }
--></style>
</head>
<body>

<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr bgcolor="#E5E5E5">
<td valign=center>
 <a href="index.html">
<font color="#004faf">主页</font></a>
 | <a href="classes.html">
<font color="#004faf">所有的类</font></a>
 | <a href="mainclasses.html">
<font color="#004faf">主要的类</font></a>
 | <a href="annotated.html">
<font color="#004faf">注释的类</font></a>
 | <a href="groups.html">
<font color="#004faf">分组的类</font></a>
 | <a href="functions.html">
<font color="#004faf">函数</font></a>
</td>
<td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table>
<h1 align=center>QSocket类参考<br><small>[<a href="network.html">网络模块</a>]</small></h1>

<p>QSocket类提供了一个有缓冲的TCP连接。
<a href="#details">详情请见……</a>
<p><tt>#include &lt;<a href="qsocket-h.html">qsocket.h</a>&gt;</tt>
<p>继承了<a href="qobject.html">QObject</a>和<a href="qiodevice.html">QIODevice</a>。
<p><a href="qsocket-members.html">所有成员函数的列表。</a>
<h2>公有成员</h2>
<ul>
<li><div class=fn>enum <a href="#Error-enum"><b>Error</b></a> { ErrConnectionRefused, ErrHostNotFound, ErrSocketRead }</div></li>
<li><div class=fn><a href="#QSocket"><b>QSocket</b></a> ( QObject&nbsp;*&nbsp;parent = 0, const&nbsp;char&nbsp;*&nbsp;name = 0 )</div></li>
<li><div class=fn>virtual <a href="#~QSocket"><b>~QSocket</b></a> ()</div></li>
<li><div class=fn>enum <a href="#State-enum"><b>State</b></a> { Idle, HostLookup, Connecting, Connected, Closing, Connection = Connected }</div></li>
<li><div class=fn>State <a href="#state"><b>state</b></a> () const</div></li>
<li><div class=fn>int <a href="#socket"><b>socket</b></a> () const</div></li>
<li><div class=fn>virtual void <a href="#setSocket"><b>setSocket</b></a> ( int&nbsp;socket )</div></li>
<li><div class=fn>QSocketDevice * <a href="#socketDevice"><b>socketDevice</b></a> ()</div></li>
<li><div class=fn>virtual void <a href="#setSocketDevice"><b>setSocketDevice</b></a> ( QSocketDevice&nbsp;*&nbsp;device )</div></li>
<li><div class=fn>virtual void <a href="#connectToHost"><b>connectToHost</b></a> ( const&nbsp;QString&nbsp;&amp;&nbsp;host, Q_UINT16&nbsp;port )</div></li>
<li><div class=fn>QString <a href="#peerName"><b>peerName</b></a> () const</div></li>
<li><div class=fn>virtual bool <a href="#open"><b>open</b></a> ( int&nbsp;m )</div></li>
<li><div class=fn>virtual void <a href="#close"><b>close</b></a> ()</div></li>
<li><div class=fn>virtual void <a href="#flush"><b>flush</b></a> ()</div></li>
<li><div class=fn>virtual Offset <a href="#size"><b>size</b></a> () const</div></li>
<li><div class=fn>virtual Offset <a href="#at"><b>at</b></a> () const</div></li>
<li><div class=fn>virtual bool <a href="#at-2"><b>at</b></a> ( Offset&nbsp;index )</div></li>
<li><div class=fn>virtual bool <a href="#atEnd"><b>atEnd</b></a> () const</div></li>
<li><div class=fn>Q_ULONG <a href="#bytesAvailable"><b>bytesAvailable</b></a> () const</div></li>
<li><div class=fn>Q_ULONG <a href="#waitForMore"><b>waitForMore</b></a> ( int&nbsp;msecs ) const</div></li>
<li><div class=fn>Q_ULONG <a href="#bytesToWrite"><b>bytesToWrite</b></a> () const</div></li>
<li><div class=fn>virtual Q_LONG <a href="#readBlock"><b>readBlock</b></a> ( char&nbsp;*&nbsp;data, Q_ULONG&nbsp;maxlen )</div></li>
<li><div class=fn>virtual Q_LONG <a href="#writeBlock"><b>writeBlock</b></a> ( const&nbsp;char&nbsp;*&nbsp;data, Q_ULONG&nbsp;len )</div></li>
<li><div class=fn>virtual int <a href="#getch"><b>getch</b></a> ()</div></li>
<li><div class=fn>virtual int <a href="#putch"><b>putch</b></a> ( int&nbsp;ch )</div></li>
<li><div class=fn>virtual int <a href="#ungetch"><b>ungetch</b></a> ( int&nbsp;ch )</div></li>
<li><div class=fn>bool <a href="#canReadLine"><b>canReadLine</b></a> () const</div></li>
<li><div class=fn>virtual QString <a href="#readLine"><b>readLine</b></a> ()</div></li>
<li><div class=fn>Q_UINT16 <a href="#port"><b>port</b></a> () const</div></li>
<li><div class=fn>Q_UINT16 <a href="#peerPort"><b>peerPort</b></a> () const</div></li>
<li><div class=fn>QHostAddress <a href="#address"><b>address</b></a> () const</div></li>
<li><div class=fn>QHostAddress <a href="#peerAddress"><b>peerAddress</b></a> () const</div></li>
</ul>
<h2>信号</h2>
<ul>
<li><div class=fn>void <a href="#hostFound"><b>hostFound</b></a> ()</div></li>
<li><div class=fn>void <a href="#connected"><b>connected</b></a> ()</div></li>
<li><div class=fn>void <a href="#connectionClosed"><b>connectionClosed</b></a> ()</div></li>
<li><div class=fn>void <a href="#delayedCloseFinished"><b>delayedCloseFinished</b></a> ()</div></li>
<li><div class=fn>void <a href="#readyRead"><b>readyRead</b></a> ()</div></li>
<li><div class=fn>void <a href="#bytesWritten"><b>bytesWritten</b></a> ( int&nbsp;nbytes )</div></li>
<li><div class=fn>void <a href="#error"><b>error</b></a> ( int )</div></li>
</ul>
<h2>保护槽</h2>
<ul>
<li><div class=fn>virtual void <a href="#sn_read"><b>sn_read</b></a> ( bool&nbsp;force = FALSE )</div></li>
<li><div class=fn>virtual void <a href="#sn_write"><b>sn_write</b></a> ()</div></li>
</ul>
<hr><a name="details"></a><h2>详细描述</h2>



QSocket类提供了一个有缓冲的TCP连接。
<p> 
<p> 它提供一个完全非阻塞的<a href="qiodevice.html">QIODevice</a>,使用套接字特征代码来修改和扩展了QIODevice的应用编程接口。
<p> 你和可能常常调用的<a href="#connectToHost">connectToHost</a>()、<a href="#bytesAvailable">bytesAvailable</a>()、<a href="#canReadLine">canReadLine</a>()这些函数并且它们继承了QIODevice。
<p> connectToHost()是一个最常用的函数。就像它的名字那样,它打开一个被命名的主机的连接。
<p> 绝大多数网络协议是基于包的或者基于行的。canReadLine()可以识别一个连接中是否包含一个完全不可读的的行,并且bytesAvailable()返回可以被读取的字节数量。
<p> 信号<a href="#error">error</a>()、<a href="#connected">connected</a>()、<a href="#readyRead">readyRead</a>()和<a href="#connectionClosed">connectionClosed</a>()通知你连接的进展。还有一些不太常用的信号。当connectToHost()已经完成它的DNS查找并且正在开始它的TCP连接时,<a href="#hostFound">hostFound</a>()被发射。当<a href="#close">close</a>()成功时,<a href="#delayedCloseFinished">delayedCloseFinished</a>()被发射。当QSocket把它的“写”队列中的数据移到TCP运行中。
<p> 还有几个套接字的访问函数:<a href="#state">state</a>()返回这个对象是否空闲,是否正在做DNS查找,是否正在连接,还是一个正在操作的连接,等等。<a href="#address">address</a>()和<a href="#port">port</a>()返回连接所使用的IP地址和端口。<a href="#peerAddress">peerAddress</a>()和<a href="#peerPort">peerPort</a>()函数返回自身所用到的IP地址和端口并且<a href="#peerName">peerName</a>()返回自身所用的名称(通常是被传送给<a href="#connectToHost">connectToHost</a>()的名字)。<a href="#socket">socket</a>() 返回这个套接字所用到的<a href="qsocketdevice.html">QSocketDevice</a>的指针。
<p> QSocket继承了<a href="qiodevice.html">QIODevice</a>并且重新实现了一些函数。通常你可以把它作为QIODevice来写,并且绝大多数情况也可以作为QIODevice来读。但匹配的不够完美,因为QIODevice应用编程接口是为同一个机器可以控制的设备而设计的,而异步的端对端网络连接和这个不太一样。例如,没有什么可以和<a href="qiodevice.html#size">QIODevice::size</a>()确切地匹配。<a href="#open">open</a>()、<a href="#close">close</a>()、<a href="#flush">flush</a>()、<a href="#size">size</a>()、<a href="#at">at</a>()、<a href="#atEnd">atEnd</a>()、<a href="#readBlock">readBlock</a>()、<a href="#writeBlock">writeBlock</a>()、<a href="#getch">getch</a>()、<a href="#putch">putch</a>()、<a href="#ungetch">ungetch</a>()和<a href="#readLine">readLine</a>()的文档详细地描述了不同点。
<p> <p>也可以参考<a href="qsocketdevice.html">QSocketDevice</a>、<a href="qhostaddress.html">QHostAddress</a>、<a href="qsocketnotifier.html">QSocketNotifier</a>和<a href="io.html">输入/输出和网络</a>。

<hr><h2>成员类型文档</h2>
<h3 class=fn><a name="Error-enum"></a>QSocket::Error</h3>
<p> 这个枚举变量指定了可能的错误:
<ul>
<li><tt>QSocket::ErrConnectionRefused</tt> - 如果连接被拒绝
<li><tt>QSocket::ErrHostNotFound</tt> - 如果主机没有被找到
<li><tt>QSocket::ErrSocketRead</tt> - 如果读取套接字失败
</ul>

<h3 class=fn><a name="State-enum"></a>QSocket::State</h3>
<p> 这个枚举变量定义了连接状态:
<ul>
<li><tt>QSocket::Idle</tt> - 如果没有连接
<li><tt>QSocket::HostLookup</tt> - 在DNS查找期间
<li><tt>QSocket::Connecting</tt> - 在TCP连接建立期间
<li><tt>QSocket::Connected</tt> - 当存在一个可操作的连接时
<li><tt>QSocket::Closing</tt> - 如果这个套接字正在关闭,但是还没有被关闭。
</ul>

<hr><h2>成员函数文档</h2>
<h3 class=fn><a name="QSocket"></a>QSocket::QSocket ( <a href="qobject.html">QObject</a>&nbsp;*&nbsp;parent = 0, const&nbsp;char&nbsp;*&nbsp;name = 0 )
</h3>
创建一个<a href="#State-enum">QSocket::Idle</a>状态的QSocket对象。
<p> <em>parent</em>和<em>name</em>参数被传递给<a href="qobject.html">QObject</a>的构造函数。

<h3 class=fn><a name="~QSocket"></a>QSocket::~QSocket ()<tt> [虚]</tt>
</h3>
销毁这个套接字。如果需要关闭连接。
<p>也可以参考<a href="#close">close</a>()。

<h3 class=fn><a href="qhostaddress.html">QHostAddress</a> <a name="address"></a>QSocket::address () const
</h3>  
返回这个套接字的主机地址。(这通常就是主机的主IP地址,但是对于到localhost的连接可能是127.0.0.1。)

<h3 class=fn><a href="qiodevice.html#Offset">Offset</a> <a name="at"></a>QSocket::at () const<tt> [虚]</tt>
</h3>
返回当前的读索引。因为QSocket是一个顺序设备,当前读索引总是0。

<p>Reimplemented from <a href="qiodevice.html#at">QIODevice</a>.
<h3 class=fn>bool <a name="at-2"></a>QSocket::at ( <a href="qiodevice.html#Offset">Offset</a>&nbsp;index )<tt> [虚]</tt>
</h3>  
这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。
<p> 向前移动读索引到<em>index</em>并且如果操作成功返回真。向前移动读索引意味着忽略进入的数据。
<p>从<a href="qiodevice.html#at-2">QIODevice</a>中重新实现的。

<h3 class=fn>bool <a name="atEnd"></a>QSocket::atEnd () const<tt> [虚]</tt>
</h3>
如果没有更多的数据可以读取,返回真,否则返回假。
<p>从<a href="qiodevice.html#atEnd">QIODevice</a>中重新实现的。

<h3 class=fn>Q_ULONG <a name="bytesAvailable"></a>QSocket::bytesAvailable () const
</h3>
返回可以读取的进入数据的字节数,也就是输入缓存的大小。等于<a href="#size">size</a>()。
<p> <p>也可以参考<a href="#bytesToWrite">bytesToWrite</a>()。
<p>实例:<a href="networkprotocol-example.html#x606">network/networkprotocol/nntp.cpp</a>。

<h3 class=fn>Q_ULONG <a name="bytesToWrite"></a>QSocket::bytesToWrite () const
</h3>
返回正在等待被写的数据的字节数,也就是输出缓存的大小。
<p> <p>也可以参考<a href="#bytesAvailable">bytesAvailable</a>()。

<h3 class=fn>void <a name="bytesWritten"></a>QSocket::bytesWritten ( int&nbsp;nbytes )<tt> [信号]</tt>
</h3>
<p> 当数据被实际写到网络时,这个信号被发射。<em>nbytes</em>参数指定了多少字节被写了。
<p> <a href="#bytesToWrite">bytesToWrite</a>()函数常常会在相同的上下文中被使用,并且它说明了还有多少数量的缓存字节数要写。
<p> <p>也可以参考<a href="#writeBlock">writeBlock</a>()和<a href="#bytesToWrite">bytesToWrite</a>()。

<h3 class=fn>bool <a name="canReadLine"></a>QSocket::canReadLine () const
</h3> 
如果这一次可以从这个套接字中读取一个完整行的文本,返回真,否则返回假。
<p> 注意如果本地出乎意料地关闭连接,这个函数返回假。这也就是说这样的循环不会工作:
<p> <pre>
    while( !socket-&gt;canReadLine() ) // 错了。
        ...
  </pre>
 
<p> <p>也可以参考<a href="#readLine">readLine</a>()。
<p>实例:<a href="clientserver-example.html#x780">network/clientserver/client/client.cpp</a>、<a href="httpd-example.html#x639">network/httpd/httpd.cpp</a>、<a href="mail-example.html#x755">network/mail/smtp.cpp</a>和<a href="networkprotocol-example.html#x607">network/networkprotocol/nntp.cpp</a>。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -