📄 vcc94.htm
字号:
</tr>
<tr>
<td class="unnamed1">FD_WRITE</td>
<td class="unnamed1">有数据发送时产生 </td>
<td class="unnamed1">void OnSend( int nErrorCode ); </td>
</tr>
<tr>
<td class="unnamed1">FD_OOB</td>
<td class="unnamed1">收到外带数据时发生</td>
<td class="unnamed1">void OnOutOfBandData( int nErrorCode ); </td>
</tr>
<tr>
<td class="unnamed1">FD_ACCEPT</td>
<td class="unnamed1">作为服务端等待连接成功时发生</td>
<td class="unnamed1">void OnAccept( int nErrorCode ); </td>
</tr>
<tr>
<td class="unnamed1">FD_CONNECT</td>
<td class="unnamed1">作为客户端连接成功时发生</td>
<td class="unnamed1">void OnConnect( int nErrorCode ); </td>
</tr>
<tr>
<td class="unnamed1">FD_CLOSE</td>
<td class="unnamed1">套接口关闭时发生</td>
<td class="unnamed1">void OnClose( int nErrorCode ); </td>
</tr>
</tbody>
</table>
<small>我们看到重载的函数中都有一个参数nErrorCode,为零则表示正常完成,非零则表示错误。通过int
CAsyncSocket::GetLastError()可以得到错误值。 </small> </span>
<p></p>
<p class="unnamed1"><small>下面我们看看套接口类所提供的一些功能,通过这些功能我们可以方便的建立网络连接和发送数据。
</small>
<ul>
<li class="unnamed1"><small>BOOL CAsyncSocket::Create( UINT nSocketPort
= 0, int nSocketType = SOCK_STREAM, long lEvent = FD_READ | FD_WRITE
| FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE, LPCTSTR lpszSocketAddress
= NULL );用于创建一个本地套接口,其中nSocketPort为使用的端口号,为零则表示由系统自动选择,通常在客户端都使用这个选择。nSocketType为使用的协议族,SOCK_STREAM表明使用有连接的服务,SOCK_DGRAM表明使用无连接的数据报服务。lpszSocketAddress为本地的IP地址,可以使用点分法表示如10.1.1.3。</small>
<li class="unnamed1"><small>BOOL CAsyncSocket::Bind( UINT nSocketPort,
LPCTSTR lpszSocketAddress = NULL )作为等待连接方时产生一个网络半关联,或者是使用UDP协议时产生一个网络半关联。</small>
<li class="unnamed1"><small>BOOL CAsyncSocket::Listen( int nConnectionBacklog
= 5 )作为等待连接方时指明同时可以接受的连接数,请注意不是总共可以接受的连接数。</small>
<li class="unnamed1"><small>BOOL CAsyncSocket::Accept( CAsyncSocket&
rConnectedSocket, SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen
= NULL )作为等待连接方将等待连接建立,当连接建立后一个新的套接口将被创建,该套接口将会被用于通信。</small>
<li class="unnamed1"><small>BOOL CAsyncSocket::Connect( LPCTSTR lpszHostAddress,
UINT nHostPort );作为连接方发起与等待连接方的连接,需要指明对方的IP地址和端口号。</small>
<li class="unnamed1"><small>void CAsyncSocket::Close( );关闭套接口。</small>
<li class="unnamed1"><small>int CAsyncSocket::Send( const void* lpBuf,
int nBufLen, int nFlags = 0 )<br>
int CAsyncSocket::Receive( void* lpBuf, int nBufLen, int nFlags =
0 );在建立连接后发送和接收数据,nFlags为标记位,双方需要指明相同的标记。</small>
<li class="unnamed1"><small>int CAsyncSocket::SendTo( const void* lpBuf,
int nBufLen, UINT nHostPort, LPCTSTR lpszHostAddress = NULL, int nFlags
= 0 )<br>
int CAsyncSocket::ReceiveFrom( void* lpBuf, int nBufLen, CString&
rSocketAddress, UINT& rSocketPort, int nFlags = 0 );对于无连接通信发送和接收数据,需要指明对方的IP地址和端口号,nFlags为标记位,双方需要指明相同的标记。</small>
</li>
</ul>
<small>我们可以看到大多数的函数都返回一个布尔值表明是否成功。如果发生错误可以通过int
CAsyncSocket::GetLastError()得到错误值。 </small> </span>
<p></p>
<p class="unnamed1"><small>由于CSocket由CAsyncSocket派生所以拥有CAsyncSocket的所有功能,此外你可以通过BOOL
CSocket::Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM,
LPCTSTR lpszSocketAddress = NULL )来创建套接口,这样创建的套接口没有办法异步处理事件,所有的调用都必需完成后才会返回。</small></p>
<p class="unnamed1"><small>在上面的介绍中我们看到MFC提供的套接口类屏蔽了大多数的细节,我们只需要做很少的工作就可以开发出利用网络进行通信的软件。</small></p>
<div align="left"> </div>
</td>
</tr>
</tbody>
</table>
</div>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -