客户机/服务器中数据流的接收和发送(上)
敬业的IT人
互联网
佚名
2008-1-3 21:45:03
- ·WEB专用服务器的安全设置的实战技巧
·巧用花生壳玩转个人服务器
·实战:用宽带架设个人服务器
·用Helix Server组建视频服务器
·Win服务器入门--IIS安装与配置(组图)
·架设语聊服务器 打造自己的TS聊天平台
·配置 DNS 服务器
·Vagaa与VeryCD目前在服务器上的行为比
·MSS系统:基于服务器的网吧双线路接入
·DNS全攻略之二 安装与管理DNS服务器
在 C/S(客户机和服务机)中进行大量数据的发送,如文件的发送等,利用C++Builder5.0 控件来完成是非常有用的。在C++Builder 5.0中NMStrmServ控件可以在服务器监听6771(这是一个缺省的端口)端口上的消息,而NMStrm控件是一个基于TCP/IP的流控件。它可以接收数据流。然后通过网络将其发送给服务器。数据流的发送和消息的发送十分的相同。下面我们来设计一个客户机与服务机的数据流的发送实例。
现在,首先打开C++Builder 5.0 新建一个工程,在Form中添加一个NMStrm控件,一个NMStrmServ控件,一个OpenDialog控件,二个Button控件,二个Edit控件,二个Label控件,一个RichEdit控件,一个StatusBar控件。
一.各控件的属性
各控件属性设计如下表:控件名属性属性值NMStrmName,PortNMStrm1,6771NMStrmServName,PortNMStrmServ1,6771OpenDialogNameOpenDialog1ButtonName,CaptionButOpen,装入文件ButtonName,CaptionButSend,发送EditNameHostEditNameLoadFileLabelName,CaptionLabel1,主机名LabelName,CaptionLabel2,选择的文件RichEditNameRichEdit1StatusBarNameStatusBar1
因为程序的需要,必须在Unit1.h中的类class TForm1 : public TForm 中的private部分加入如下的声明:
private: //user declarations
bool ValidFile;
这个bool 变量用于判断文件的有效性。
二.控件的事件和方法
1.NMStrm的事件和方法:
PostIt方法:该方 糜诮萘鞣⑺透衿鳌F涓袷饺缦拢?br>
function PostIt(const sStrm: TStream): string;
OnConnect事件:在PostIt方法发出和服务器建立连接以后,将产生且事件。
OnHostResolved事件:如果成功地将主机名或域名地址解析成IP地址后,将产生且事件 。
OnMessageSent事件:在数据流发送成功后,产生的事件。
OnInvalidHost事件:过程主机输入不正确或找不到主机名产生的事件。
OnPacketSent事件:在数据流发送过程中用于显示发送进度的事件,属性BytesSent和BytesTotal是显示发送的进度。
2.NMStrmServ的事件和方法:
OnNSG事件:用于对客户机发送过来的数据流准备数据缓冲区空间。并根据获取数据流的大小分配相应的内存空间来保证缓冲区的大小,再把数据流显示在RichEdit控件中,最后删除缓冲区。
三. 程序源代码如下:
//---------------------------------------------------------------------------
//"Unit1.h"的源代码
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include $#@60;Classes.hpp$#@62;
#include $#@60;Controls.hpp$#@62;
#include $#@60;StdCtrls.hpp$#@62;
#include $#@60;Forms.hpp$#@62;
#include $#@60;Dialogs.hpp$#@62;
#include $#@60;NMMSG.hpp$#@62;
#include $#@60;NMSTRM.hpp$#@62;
#include $#@60;Psock.hpp$#@62;
#include $#@60;ComCtrls.hpp$#@62;
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TNMStrmServ *NMStrmServ1;
TOpenDialog *OpenDialog1;
TNMStrm *NMStrm1;
TLabel *Label1;
TEdit *Host;
TButton *ButOpen;
TButton *ButSend;
TStatusBar *StatusBar1;
TEdit *LoadFile;
TLabel *Label2;
TRichEdit *RichEdit1;
void __fastcall ButOpenClick(TObject *Sender);
void __fastcall ButSendClick(TObject *Sender);
void __fastcall NMStrmServ1MSG(TComponent *Sender,
const AnsiString sFrom, TStream *strm);
void __fastcall NMStrm1Connect(TObject *Sender);
void __fastcall NMStrm1HostResolved(TComponent *Sender);
void __fastcall NMStrm1MessageSent(TObject *Sender);
void __fastcall NMStrm1InvalidHost(bool &Handled);
void __fastcall NMStrm1PacketSent(TObject *Sender);
private: // User declarations
bool ValidFile;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
- 最新文章
- 用C++ Builder 制作屏幕保护程序[01-03]
- 开发 C++ Builder 应用程序[01-03]
- 利用C++Builder遍历文件目录[01-03]
- 利用C++ Builder为计算机增加启动日志[01-03]
- 利用C++ Builder实现网络连接检测程序[01-03]
- 理解 C++ Builder 可视化组件库(VCL)[01-03]
- 相关文章
