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

📄 20001205002.htm

📁 C++Builder教学大全
💻 HTM
字号:
<HTML>

<HEAD>

 

<TITLE>如何利用C++ Builder 5.0 Enterprise 创建用户自己的网上聊天程序 </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"><span class=name00><font size="3"><b><br>

          如何利用C++ Builder 5.0 Enterprise 创建用户自己的网上聊天程序</b></font><br>

          </span><span class=Name01><font 

            color=#666666>(作者:孙航东)</font></span></p>

        <p><br>

          <br>

          <span 

            class=content><br>

            网络是一个激动人心的领域,编写网络上的应用程序更是很多程序员向往的情节,然而编写网络程序需要掌握大量的网络传输协议、编程接口和WinSock32 

          API 函数,正因为如此,要完成从Windows程序员到Web程序员的转变不是一件易事.最近笔者成功的用C++ Buil--der 5.0 

          Enterprise 版编写出了网上聊天程序,特介绍如下: <br>

          <br>

            一、 原理:网络聊天工具需要通过TCP/IP协议,因此可以把网络聊天程序分为服务器端和客户器端两部分,其中 服务器端用以把程序转换成一个虚拟的 

          TCP/IP 服务器. 并且和指定的客户机建立连接,在连接成功后,向指定的客户器发送和接收数据;客户器端把程序转换成一个虚拟的TCP/IP 

          客户器,并且向指定的服务器发出连接信号,在连接成功后,向指定的服务器发送和接收数据。在C++ Builder 5.0 环境下服务器端和客户器端的功能分别由TServerSocket控件和TClientSocket 

          控件加以实现。其中TCP/IP协议以包含在控件的属性中,因此只要正确填入属性,便可实现网上通讯。 <br>

          <br>

            二、具体实现:首先`在C++ builder 5.0 环境下建立一个Application ,并保存为Project1。在Form1 

          上添加如下控件,并设置相关属性,其中Memo2于显示对方传来的信息,其中Memo1用于显示传给对方的信息: <br>

          <br>

          控件名称         属性         值 <br>

          <br>

          TBevel         Caption       Bevel1 <br>

          <br>

          TSpeedButton     Caption       SpeedButton1 <br>

          <br>

          TMemo         Caption       Memo1 <br>

          <br>

          TMemo         Caption       Memo2 <br>

          <br>

          TMainMenu       Caption       MainMenu1 <br>

          <br>

          TServerSocket     Caption       ServerSocket1 <br>

          <br>

          TClientSocket     Caption      ClientSocket1 <br>

          <br>

            同时在 MainMenu1控件中增加 三个菜单项,其属性为 <br>

          <br>

          Name                 Caption   <br>

          <br>

          Connect               连接 <br>

          <br>

          Disconncet              断开 <br>

          <br>

          Listin                监听 <br>

          <br>

            在Unit1 的Private中添加: <br>

          <br>

              bool   IsServer; <br>

          <br>

              String  Server; <br>

          <br>

            在Connect 的Click句柄添加如下代码: <br>

          <br>

          void __fastcall TForm1::ConnectClick(TObject *Sender) <br>

          <br>

          { <br>

          <br>

          if (ClientSocket1-&gt;Active){ ClientSocke1t-&gt;Active = false;} // 

          判断是否以连接,如连接则断开连接// <br>

          <br>

          if (InputQuery("Computer to connect to", "添入要连接的机器的IP地址:", Server)) 

          <br>

          <br>

          { <br>

          <br>

             if (Server1.Length() &gt; 0)//判断用户是否已经添入// <br>

          <br>

             { <br>

          <br>

              ClientSocket-1&gt;Host = Server;//设置要连接的IP地址为用户指定的IP地址值// <br>

          <br>

              ClientSocket1-&gt;Active = true;//进行连接// <br>

          <br>

             } <br>

          <br>

          } <br>

          <br>

          } <br>

          <br>

            在Listen的Click句柄添加如下代码: <br>

          <br>

          void __fastcall Form1 ::ListenClick(TObject *Sender) <br>

          <br>

          { <br>

          <br>

          Listen-&gt;Checked = !Listen-&gt;Checked; <br>

          <br>

          if (Listen-&gt;Checked) <br>

          <br>

             ServerSocket1-&gt;Active = true;//服务器端监听来自客户器断的信号// <br>

          <br>

          else <br>

          <br>

            ServerSocket1-&gt;Active = false; <br>

          <br>

          <br>

          <br>

          } <br>

          <br>

            在Disconnect 的Click句柄添加如下代码: <br>

          <br>

          void __fastcall TForm1::ExitClick(TObject *Sender) <br>

          <br>

          { <br>

          <br>

          ServerSocket1-&gt;Close();//关闭服务器端// <br>

          <br>

          ClientSocket1-&gt;Close();//关闭客户器端// <br>

          <br>

          Close(); <br>

          <br>

          } <br>

          <br>

            在Memo1 的KeyDown句柄添加如下代码: <br>

          <br>

          void __fastcall TForm1::Memo1KeyDown(TObject *Sender, WORD &amp;Key, 

          <br>

          <br>

             TShiftState Shift) <br>

          <br>

          { <br>

          <br>

          if (Key == VK_RETURN) <br>

          <br>

          { <br>

          <br>

             if (IsServer) <br>

          <br>

               {ServerSocket-&gt;Socket-&gt;Connections[0]-&gt;SendText( <br>

          <br>

               Memo1-&gt;Lines-&gt;Strings[Memo1-&gt;Lines-&gt;Count - 1]); }//作为服务器一端发送数据// 

          <br>

          <br>

             else <br>

          <br>

             { ClientSocket-&gt;Socket-&gt;SendText(Memo1-&gt;Lines-&gt;Strings[ 

          <br>

          <br>

              Memo1-&gt;Lines-&gt;Count -1]);}//作为客户器一端发送数据// <br>

          <br>

          } <br>

          <br>

          } <br>

          <br>

            在ClientSocket1的Connect句柄添加如下代码: <br>

          <br>

          void __fastcall TForm1::ClientSocket1Connect(TObject *Sender , TCustomWinSocke 

          <br>

          <br>

          t *Socket) <br>

          <br>

          {//当用户和远程服务器连接成功后,激发该事件// <br>

          <br>

          StatusBar1-&gt;Panels-&gt;Items[0]-&gt;Text = "Connect to: " + Socket-&gt;RemoteHost; 

          <br>

          <br>

          } <br>

          <br>

            在ClientSocket1的Error句柄添加如下代码: <br>

          <br>

          void __fastcall TForm1::ClientSocket1Error(TObject *Sender, <br>

          <br>

             TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &amp;ErrorCode) 

          <br>

          <br>

          { //当用户和远程服务器连接失败后,激发该事件// <br>

          <br>

          Memo2-&gt;Lines-&gt;Add("Error connecting to:" + Server); <br>

          <br>

          ErrorCode = 0; <br>

          <br>

          } <br>

          <br>

            在ClientSocket1的Read句柄添加如下代码: <br>

          <br>

          void __fastcall TChatForm::ClientSocket1SeverRead(TObject *Sender, TCustomWinSo 

          <br>

          <br>

          cket *Socket) <br>

          <br>

          { <br>

          <br>

          //当作为客户器一端读来自服务器一端的数据时,激发该事件// <br>

          <br>

          Memo2-&gt;Lines-&gt;Add(Socket-&gt;ReceiveText()); <br>

          <br>

          } <br>

          <br>

            在SeverSocket1的ClientRead句柄添加如下代码 <br>

          <br>

          void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocke 

          <br>

          <br>

          t *Socket) <br>

          <br>

          { <br>

          <br>

          //当作为客户器一端读来自服务器一端的数据时,激发该事件// <br>

          <br>

          Memo2-&gt;Lines-&gt;Add(Socket-&gt;ReceiveText()); <br>

          <br>

          } <br>

          <br>

          在SeverSocket1的Accept句柄添加如下代码 <br>

          <br>

          void __fastcall TForm1::ServerSocket1Accept(TObject *Sender, TCustomWinSocket 

          <br>

          <br>

          *Socket) <br>

          <br>

          { //当服务器成功的监听到来自客户器的信号后,激发该事件// <br>

          <br>

          IsServer = true; <br>

          <br>

          StatusBar1-&gt;Panels-&gt;Items[0]-&gt;Text = "Connect to: " + Socket-&gt;RemoteAddress; 

          <br>

          <br>

          <br>

          <br>

          } <br>

          <br>

            在Form1的Create句柄添加如下代码: <br>

          <br>

          void __fastcall TForm1::Form1Create(TObject *Sender) <br>

          <br>

          { <br>

          <br>

            IsServer=false; <br>

          <br>

          } <br>

          <br>

          注:“//”为注释. <br>

          <br>

            以上程序C++ Builder 5.0Enterprise通过。</span></p>

                                                </td>

    </tr>

  </table>

 

</div>

</BODY></HTML>

⌨️ 快捷键说明

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