敬业的IT人 >> 编程开发 >> C++Builder >> 在C++Builder中编写发送图象文件程序

在C++Builder中编写发送图象文件程序

敬业的IT人 互联网 佚名 2008-1-3 21:13:04

  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查看 进入讨论组讨论。
粤ICP备06119539号
Copyright CiscoSky.Org,Some Rights Reserved.
Email:me1228#tom.com