在C++Builder中编写发送图象文件程序
ICQ能够实现点到点的数据传送,但如果想把一个多媒体图像文件送给另一方,是比较难的。但可以利用C++Builder5.0 的控件来编写一个用于发送图像的应用程序。
打开C++Builder 5.0 ,新建一个工程,在Form1中添加NMStrm,NMStrmServ,OpenPictureDialog控件,再添;加Button控件3个,Label控件1个,Edit控件 2 个,StatusBar控件1个。
首先我们来认识一下NMStrm控件,NMStrmServ控件和OpenPictureDialog控件。NMStrm控件是一个基于TCP/IP的控件,它可以接收数据流,然后通过网络将其发送给服务器。NMStrmServ控件是可以接收从客户端发送来的数据流,服务器只监听TCP/IP 端口,不负责监听UDP端口。OpenPictureDialog控件是用于打开图像文件进行浏览或编辑。
各种控件的属性设计如下:
控件名 属性 值
Form Caption 发送图像
Image Name Image1
Button name=Button1,Caption=发送
Button name=Button2,Caption=显示
Button name=Button3,Caption=打开
Label name=Label1,Caption=远程主机:
Edit name Edit1
Edit name Edit2
NMStrm name NMStrm1
NMStrmServ name NMStrmServ1
OpenPictureDialog name OpenPictureDialog1
StatusBar name StatusBar1
源程序代码如下:
//“Unit1.h"的源代码
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//----------------------------------------- -------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <Dialogs.hpp>
#include <ExtCtrls.hpp>
#include <ExtDlgs.hpp>
#include <NMSTRM.hpp>
#include <Psock.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TButton *Button2;
TNMStrm *NMStrm1;
TNMStrmServ *NMStrmServ1;
TOpenPictureDialog *OpenPictureDialog1;
TImage *Image1;
TLabel *Label1;
TEdit *Edit1;
TButton *Button3;
TEdit *Edit2;
TStatusBar *StatusBar1;
void __fastcall Button3Click(TObject *Sender);
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall NMStrm1Connect(TObject *Sender);
void __fastcall NMStrm1ConnectionFailed(TObject *Sender);
void __fastcall NMStrm1Disconnect(TObject *Sender);
void __fastcall NMStrm1HostResolved(TComponent *Sender);
void __fastcall NMStrm1MessageSent(TObject *Sender);
void __fastcall NMStrm1PacketSent(TObject *Sender);
void __fastcall NMStrm1Status(TComponent *Sender, AnsiString Status);
void __fastcall NMStrm1InvalidHost(bool &Handled);
void __fastcall NMStrmServ1ClientContact(TObject *Sender);
void __fastcall NMStrmServ1MSG(TComponent *Sender,
const AnsiString sFrom, TStream *strm);
void __fastcall NMStrmServ1Status(TComponent *Sender,
AnsiString Status);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//“Unit1.cpp"的源代码
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//打开文件
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (OpenPictureDialog1->Execute())
Edit2->Text =OpenPictureDialog1->FileName ;
}
//---------------------------------------------------------------------------
//发送图像文件
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TFileStream *MyFStream;
MyFStream = new TFileStream(OpenPictureDialog1->FileName, fmOpenRead);
try
{ NMStrm1->Host=Edit1->Text; //指定主机名
NMStrm1->PostIt(MyFStream); //发送的文件
}
catch(...){}
}
//---------------------------------------------------------------------------
//显示图像文件
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Image1->Picture->LoadFromFile(".\\tmp.bmp");
}
//---------------------------------------------------------------------------
//连接到远程主机
void __fastcall TForm1::NMStrm1Connect(TObject *Sender)
{
StatusBar1->SimpleText = "Connected";
}
//---------------------------------------------------------------------------
//没有连接到主机时产生此事件
void __fastcall TForm1::NMStrm1ConnectionFailed(TObject *Sender)
{
ShowMessage("无法连接到对方");
}
//---------------------------------------------------------------------------
//在客户端文件发送到时产生此事件
void __fastcall TForm1::NMStrm1Disconnect(TObject *Sender)
{
if (StatusBar1 != 0)
StatusBar1->SimpleText = "文件发送到了";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NMStrm1HostResolved(TComponent *Sender)
{
StatusBar1->SimpleText = "Host Resolved";
}
//---------------------------------------------------------------------------
//当文件发送到对方时产生此事件
void __fastcall TForm1::NMStrm1MessageSent(TObject *Sender)
{
ShowMessage("有文件发送到对方");
}
//---------------------------------------------------------------------------
//数据发送到对方时产生此事件
void __fastcall TForm1::NMStrm1PacketSent(TObject *Sender)
{
StatusBar1->SimpleText = IntToStr(NMStrm1->BytesRecvd)+" bytes of "
+NMStrm1->BytesTotal+" sent";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NMStrm1Status(TComponent *Sender,AnsiString Status)
{
if (StatusBar1 != 0)
StatusBar1->SimpleText = Status;
}
//---------------------------------------------------------------------------
//没有主机名时产生此事件
void __fastcall TForm1::NMStrm1InvalidHost(bool &Handled)
{
AnsiString NewHost;
if (InputQuery("没有主机", "请输入要发送的主机名:", NewHost))
{
NMStrm1->Host = NewHost;
Edit1->Text=NewHost;
}
}
//---------------------------------------------------------------------------
//表示客户机已连接到服务器了
void __fastcall TForm1::NMStrmServ1ClientContact(TObject *Sender)
{
StatusBar1->SimpleText = "Client Contacted";
}
//---------------------------------------------------------------------------
//接收客户端发送来的文件
void __fastcall TForm1::NMStrmServ1MSG(TComponent *Sender,
const AnsiString sFrom, TStream *strm)
{
if (FileExists(".\\tmp.bmp"))
DeleteFile(".\\tmp.bmp");
TFileStream *MyFStream;
MyFStream = new TFileStream(".\\tmp.bmp", fmCreate);
try
{
MyFStream->CopyFrom(strm, strm->Size);
}
catch(...)
{
}
MyFStream->Free();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NMStrmServ1Status(TComponent *Sender,
AnsiString Status)
{
if (StatusBar1 != 0)
StatusBar1->SimpleText = Status;
}
//---------------------------------------------------------------------------
- 如何重装xp系统图解
- 下载Flash播放插件
- 巧妙清除Windows 2000/XP登录密码
- 如何利用路由器设置局域网
- QQ空间打不开
- 开机后鼠标不动怎么办
- Excel密码保护的解除方法与解除原理
- Windows XP注册表详解
- 3dmax不锈钢金属材质的制作方法
- 硬盘变成raw格式怎么办
编好代码以后,编译源程序,在两台计算机上运行它就行了,每一方都可以做服务器或工作站,只要对方运行了该程序,都可以向其发送图象文件,也可以在单机上操作,快来试试吧!
URL查看 进入讨论组讨论。- 最新文章
- 用C++Builder开发ISAPI扩展应用程序[01-03]
- 用C++Builder实现邮件群发[01-03]
- 致Delphi和C++Builder社群的一封公开信[01-03]
- 给Delphi/C++Builder程序员:编写高质量代码的..[01-03]
- 用C++Builder写COM版的Hello world[01-03]
- C++Builder如何响应消息及自定义消息[01-03]
- 相关文章
