📄 teach_road_61.htm
字号:
</tr>
<tr>
<td>FD_OOB</td>
<td>收到外带数据时发生</td>
<td>void OnOutOfBandData( int nErrorCode );
</td>
</tr>
<tr>
<td>FD_ACCEPT</td>
<td>作为服务端等待连接成功时发生</td>
<td>void OnAccept( int nErrorCode );
</td>
</tr>
<tr>
<td>FD_CONNECT</td>
<td>作为客户端连接成功时发生</td>
<td>void OnConnect( int nErrorCode );
</td>
</tr>
<tr>
<td>FD_CLOSE</td>
<td>套接口关闭时发生</td>
<td>void OnClose( int nErrorCode );
</td>
</tr>
</table>
我们看到重载的函数中都有一个参数nErrorCode,为零则表示正常完成,非零则表示错误。通过int CAsyncSocket::GetLastError()可以得到错误值。
</p>
<p>下面我们看看套接口类所提供的一些功能,通过这些功能我们可以方便的建立网络连接和发送数据。
<ul>
<li>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。</li>
<li>BOOL CAsyncSocket::Bind( UINT nSocketPort, LPCTSTR lpszSocketAddress = NULL )作为等待连接方时产生一个网络半关联,或者是使用UDP协议时产生一个网络半关联。</li>
<li>BOOL CAsyncSocket::Listen( int nConnectionBacklog = 5 )作为等待连接方时指明同时可以接受的连接数,请注意不是总共可以接受的连接数。</li>
<li>BOOL CAsyncSocket::Accept( CAsyncSocket& rConnectedSocket, SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL )作为等待连接方将等待连接建立,当连接建立后一个新的套接口将被创建,该套接口将会被用于通信。</li>
<li>BOOL CAsyncSocket::Connect( LPCTSTR lpszHostAddress, UINT nHostPort );作为连接方发起与等待连接方的连接,需要指明对方的IP地址和端口号。</li>
<li>void CAsyncSocket::Close( );关闭套接口。</li>
<li>int CAsyncSocket::Send( const void* lpBuf, int nBufLen, int nFlags = 0 )<br>int CAsyncSocket::Receive( void* lpBuf, int nBufLen, int nFlags = 0 );在建立连接后发送和接收数据,nFlags为标记位,双方需要指明相同的标记。</li>
<li>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为标记位,双方需要指明相同的标记。</li>
</ul>
我们可以看到大多数的函数都返回一个布尔值表明是否成功。如果发生错误可以通过int CAsyncSocket::GetLastError()得到错误值。
</p>
<p>由于CSocket由CAsyncSocket派生所以拥有CAsyncSocket的所有功能,此外你可以通过BOOL CSocket::Create( UINT nSocketPort = 0, int nSocketType = SOCK_STREAM, LPCTSTR lpszSocketAddress = NULL )来创建套接口,这样创建的套接口没有办法异步处理事件,所有的调用都必需完成后才会返回。</p>
<p>在上面的介绍中我们看到MFC提供的套接口类屏蔽了大多数的细节,我们只需要做很少的工作就可以开发出利用网络进行通信的软件。</p>
</small>
</td>
</tr>
<tr><td>
<small>
<p align=center><a href=index.htm#charpter6>返回</a></p>
</small>
</td></tr>
</table>
<p align=center><small>版权所有 闻怡洋 <a href=http://www.vchelp.net/>http://www.vchelp.net/</a></small></p>
</td><!--end-->
</tr>
</table>
</td></tr></table><!--整体框架 END-->
<!--- BEGIN CLICK2NET CODE --->
<center><a href="http://redirect.click2net.com/?A056824,92" target="_blank">
<img border=0 alt="你每点一下广告我就能有更多的上网时间为大家寻找资料" src="http://image.click2net.com/?A056824,92" width="468" height="60"></a>
<br><font style=small class=engul><a href="http://www.click2net.com/" target="_blank">Free Advertising from Click2Net!</a></font></center>
<!--- END CLICK2NET CODE --->
<SCRIPT LANGUAGE='JavaScript'>write_tail();</SCRIPT>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -