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

📄 20000924006.htm

📁 C++Builder教学大全
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML>

<HEAD>

 

<TITLE>TServerSocket和TClientSocket的使用</TITLE>



<META content="MSHTML 5.00.2314.1000" name=GENERATOR>

</HEAD>

<BODY aLink=#FF0000 bgColor=#ffffff leftMargin=0 link=#187800 topMargin=0 

vLink=#990099>



<div align="center">

  <table width="744" border="0" cellspacing="0" cellpadding="0" height="76">

    <tr> 

      <td> 

        <p 

    align=center><strong><font size="3"><br>

          TServerSocket和TClientSocket的使用</font><br>

          抱雪</strong></p>

        在网络编程中,WinSocket API编程是最基本,也是最麻烦的地方(说句不怕影响形象的话,我对此就是一知半解)。但是,如果你是使用C++Builder作为编程平台,你就偷着乐吧,有了BCB,菜鸟变高手!:-)<br>

        <br>

        在BCB中,TServerSocket和TClientSocket涵盖了基本的WinSocket编程,其中TServerSocket作为服务器方使用,TClientSocket作为客户端使用,这两个组件本身并不提供Socket连接,但是他们都有一个Socket属性,这个属性才提供了Socket连接。下面就先向大家介绍一下这两个组件常用的方法属性,然后在通过一个例子来看看这两个组件的使用。<br>

        1)TServerSocket<br>

        <table 

      cellpadding=0 cellspacing=0 width="100%">

          <tbody> 

          <tr> 

            <td width="12%">名称</td>

            <td width="18%">类型</td>

            <td width="70%">说明</td>

          </tr>

          <tr> 

            <td width="12%">Socket</td>

            <td width="18%">TServerWinSocket</td>

            <td width="70%">最重要的属性,提供Socket连接,事实上发送/接收数据都要靠这个属性,下面还有详细的介绍。</td>

          </tr>

          <tr> 

            <td height=20 width="12%">Port</td>

            <td height=20 width="18%">int</td>

            <td height=20 width="70%">要监听的端口,如果在Service属性中指定了服务类型,此属性将被忽略。</td>

          </tr>

          <tr> 

            <td width="12%">Service</td>

            <td width="18%">AnsiString</td>

            <td 

            width="70%">提供的服务,如HTTP、FTP等,如果在这里指定了服务类型,Port将被忽略,因为各种服务都有特定的端口,如FTP:21、HTTP:80</td>

          </tr>

          <tr> 

            <td width="12%">ServerType</td>

            <td width="18%">TServerType</td>

            <td width="70%">设置与客户连接的方式,取值为两个枚举常量stNonBlocking和 stThreadBlocking,stNonBlocking表示用非阻塞方式连接每一个客户,每个连接都在一个单独的线程中处理。并用OnClientRead()和OnClientWrite()通知服务器端的Socker进行读写。 

              stThreadBlocking表示以阻塞方式连接客户,即以主动查询的方式可客户连接。</td>

          </tr>

          <tr> 

            <td width="12%">Active</td>

            <td width="18%">bool</td>

            <td width="70%">激活服务,相当于调用Open()方法。</td>

          </tr>

          <tr> 

            <td width="12%">OnAccept</td>

            <td width="18%">事件</td>

            <td width="70%">当有客户请求连接时触发</td>

          </tr>

          <tr> 

            <td width="12%">OnClientRead</td>

            <td width="18%">事件</td>

            <td width="70%">通知服务器去读取有关信息。OnClientWrite与此类似。</td>

          </tr>

          </tbody> 

        </table>

        <p>2)TClientSocket</p>

        <table 

      cellpadding=0 cellspacing=0 width="100%">

          <tbody> 

          <tr> 

            <td width="14%">名称</td>

            <td width="17%">类型</td>

            <td width="69%">说明</td>

          </tr>

          <tr> 

            <td width="14%">Socket</td>

            <td width="17%">TClientWinSocket</td>

            <td width="69%">同TServerSocket</td>

          </tr>

          <tr> 

            <td width="14%">Active</td>

            <td width="17%">bool</td>

            <td width="69%">同TServerSocket</td>

          </tr>

          <tr> 

            <td width="14%">Address</td>

            <td width="17%">AnsiString</td>

            <td width="69%">服务器的IP地址,如202.98.35.14</td>

          </tr>

          <tr> 

            <td width="14%">ClientType</td>

            <td width="17%">TClientType</td>

            <td 

            width="69%">与服务器连接方式,取值为两个枚举常量ctNonBlocking,tBlocking。ctNonBlocking表示非阻塞方式,ctBlocking表示阻塞方式,详见上例。</td>

          </tr>

          <tr> 

            <td width="14%">Host</td>

            <td width="17%">AnsiString</td>

            <td width="69%">要连接的主机名,如www.cpcw.com</td>

          </tr>

          <tr> 

            <td width="14%">Port</td>

            <td width="17%">int</td>

            <td width="69%">同TServerSocket</td>

          </tr>

          <tr> 

            <td width="14%">Service</td>

            <td width="17%">AnsiString</td>

            <td width="69%">同TServerSocket</td>

          </tr>

          <tr> 

            <td width="14%">OnConnect</td>

            <td width="17%">事件</td>

            <td width="69%">当连接时发生,OnConnecting、OnDisConnect与此类似</td>

          </tr>

          <tr> 

            <td width="14%">OnRead</td>

            <td width="17%">事件</td>

            <td width="69%">通知客户机去读取有关信息。OnWrite与此类似。</td>

          </tr>

          </tbody> 

        </table>

        <p>TServerSocket和TClientSocket只提供基本的服务器/客户机的连接,真正提供数据传输的是它们都有的属性Socket,它的类型分别是TServerWinSocket和TClientWinSocket,而TServerWinSocket和TClientWinSocket的父类都是TCustomWinSocket,下面我们就来看看TServerWinSocket和TClientWinSocket常用的属性和方法。 

        </p>

        <p>共同的属性方法(来源于TCustomWinSocket)</p>

        <table border=0 

      cellpadding=0 cellspacing=0 width="100%">

          <tbody> 

          <tr> 

            <td width="22%">名称</td>

            <td width="13%">类型</td>

            <td width="65%">说明</td>

          </tr>

          <tr> 

            <td width="22%">Connected</td>

            <td width="13%">bool</td>

            <td width="65%">检查是否连接成功</td>

          </tr>

          <tr> 

            <td width="22%">LocalAddress</td>

            <td width="13%">AnsiString</td>

            <td width="65%">本地IP地址,与此类似LocalHost:本机域名,LocalPort:本机端口</td>

          </tr>

          <tr> 

            <td width="22%">RemoteAddress</td>

            <td width="13%">AnsiString</td>

            <td width="65%">另一端的IP地址,与此类似RemoteHost:另一端域名,RemotePort:另一端端口</td>

          </tr>

          <tr> 

            <td width="22%">SocketHandle</td>

            <td width="13%">int</td>

            <td width="65%">只读,返回Socket对象的Windows句柄,如果你要调用WinSocket API函数,将用到此句柄。</td>

          </tr>

          <tr> 

            <td width="22%">Handle</td>

            <td width="13%">HWND</td>

            <td width="65%">Socket能够接受到的异步事件都是以Windows消息的形式发送给此句柄的。</td>

          </tr>

          <tr> 

            <td width="22%">Close()</td>

            <td width="13%">方法</td>

            <td width="65%">作为服务器,关闭所有连接;作为客户机,关闭自己与服务器的连接</td>

          </tr>

          <tr> 

            <td width="22%">SendText(AnsiString)</td>

            <td width="13%">方法</td>

            <td width="65%">发送一个字符串,</td>

          </tr>

          <tr> 

            <td colspan=2>SendBuf(void* buff,int count)</td>

            <td width="65%">发送缓冲区buff中的count个字节,返回实际发送的字节数</td>

          </tr>

          <tr> 

            <td colspan=2>SendStream(TStream* AStream)</td>

            <td width="65%">发送一个流到Socket中。</td>

          </tr>

          <tr> 

            <td colspan=2>ReceiveText()</td>

            <td width="65%">从Socket中读取并返回一个字符串。</td>

          </tr>

          <tr> 

            <td colspan=2 height=18>ReceiveLength()</td>

            <td height=18 width="65%">从Socket读取数据需多少字节的缓冲区。</td>

          </tr>

          <tr> 

            <td colspan=2>ReceiveBuf(void* buff,int count)</td>

            <td width="65%">从Socket中读取count字节的数据到buff。</td>

          </tr>

          </tbody> 

        </table>

        <p>TClientWinSocket</p>

        <p>TClientWinSocket只增加了一个ClientType属性,用于决定与服务器的连接类型(参见<br>

          TClientSocket-&gt;ClientType)。</p>

        <p>TServerWinSocket</p>

        <table 

      cellspacing=0 width="100%">

          <tbody> 

          <tr> 

            <td>名称</td>

            <td>类型</td>

            <td>说明</td>

          </tr>

⌨️ 快捷键说明

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