技术文章 > 客户机/服务机中数据流的接收和发送 (下)

客户机/服务机中数据流的接收和发送 (下)

2018-12-15 21:54

文档管理软件,文档管理系统,知识管理系统,档案管理系统的技术资料:
//"Unit1.cpp"源代码
//---------------------------------------------------------------------------
#include $#@60;vcl.h$#@62;
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//装入要发送的文件
void __fastcall TForm1::ButOpenClick(TObject *Sender)
{
if(OpenDialog1-$#@62;Execute())
{ LoadFile-$#@62;Text=OpenDialog1-$#@62;FileName;
ValidFile=true;
}
else
{ LoadFile-$#@62;Text="";
ValidFile=false;
}
}
//---------------------------------------------------------------------------
//按下发送键
void __fastcall TForm1::ButSendClick(TObject *Sender)
{
if(!ValidFile) //核实已载的文件
{ MessageBox(NULL,"没有选择发送的文件","错误",MB_ICONERROR);
return;
}
//设置控件的TCP/IP属性
NMStrm1-$#@62;Host =Host-$#@62;Text ;
NMStrm1-$#@62;ReportLevel =Status_Basic;
//载入数据流
TFileStream *Strm=new TFileStream(LoadFile-$#@62;Text ,fmOpenRead);
NMStrm1-$#@62;PostIt(Strm);
delete Strm; //删除变量
}
//---------------------------------------------------------------------------
//准备数据缓冲区空间
void __fastcall TForm1::NMStrmServ1MSG(TComponent *Sender,
const AnsiString sFrom, TStream *strm)
{
char *Buffer=new char[strm-$#@62;Size+1];
strm-$#@62;ReadBuffer(Buffer,strm-$#@62;Size);
Buffer[strm-$#@62;Size+1]= ";
RichEdit1-$#@62;Lines-$#@62;Text=Buffer;
delete []Buffer; //删除缓冲区
}
//---------------------------------------------------------------------------
//和服务器连接后产生的事件
void __fastcall TForm1::NMStrm1Connect(TObject *Sender)
{
StatusBar1-$#@62;SimpleText="连接成功";
}
//---------------------------------------------------------------------------
//成功地解主机名
void __fastcall TForm1::NMStrm1HostResolved(TComponent *Sender)
{
StatusBar1-$#@62;SimpleText="主机名已找到";
}
//---------------------------------------------------------------------------
//数据发送成功
void __fastcall TForm1::NMStrm1MessageSent(TObject *Sender)
{
StatusBar1-$#@62;SimpleText="发送成功";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NMStrm1InvalidHost(bool &Handled)
{
AnsiString TmpStr;
if(InputQuery("找不到主机","请输入新的主机名:",TmpStr))
{ NMStrm1-$#@62;Host=TmpStr;
}
}
//---------------------------------------------------------------------------
//显示发送进度
void __fastcall TForm1::NMStrm1PacketSent(TObject *Sender)
{
StatusBar1-$#@62;SimpleText=IntToStr(NMStrm1-$#@62;BytesSent)+
"Bytes out of"+IntToStr(NMStrm1-$#@62;BytesTotal)+"transferred";
}
//---------------------------------------------------------------------------
  写完程序代码以后,对源程序进行编译运行。该程序多台计算机上运行,没有确定的服务机和客户机,任何一台计算机都可以作为客户机和服务机。只要对方运行了该程序,你就可以对其进行连接,并发送数据流给对方。运行如下图:

该程序也可以在单机上运行。心动不如快行动,快来试试吧!