DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: david666
今日帖子: 43
在线用户: 15
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 jackken (jackken) ★☆☆☆☆ -
普通会员
2003/10/18 10:28:14
标题:
如何用NMUDP传输图片 浏览:1956
加入我的收藏
楼主: 使用NMUDP控件,不用流,如何传输图像?据我所知NMUDP的传输使用
procedure SendBuffer(Buff: array of char; length: integer);
如何把位图或其他图像放到Buff中呢?


----------------------------------------------
-
作者:
男 bios (阿贡) ★☆☆☆☆ -
盒子中级会员
2003/10/18 13:27:22
1楼: 不用流不好做,因为 图片的 编码算法是很复杂的
如果要按字符来 串,就得知道 图片的 二进制 对应字符 是什么排列规则
当你发送后,要保证对方能 根据这个规则 正确 重新排列 !


所以:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, NMUDP;

type
  TForm1 = class(TForm)
    NMUDP1: TNMUDP;
    NMUDP2: TNMUDP;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Label1: TLabel;
    Label2: TLabel;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure NMUDP1DataSend(Sender: TObject);
    procedure NMUDP2DataReceived(Sender: TComponent; NumberBytes: Integer;
      FromIP: String; Port: Integer);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 strFile:String   ;
 iHandle,iSize,iRead :longint;
 pFile :Pchar    ;
begin
if(OpenDialog1.Execute) then
 begin
  strFile:=OpenDialog1.FileName;
 end;
try
 begin
  iHandle:=FileOpen(strFile,fmOpenRead);
  iSize:=FileSeek(iHandle,0,2);
  FileSeek(iHandle,0,0);
  getmem(pFile ,iSize);
  iRead:=FileRead(iHandle,pFile^,iSize);
  NMUDP1.SendBuffer(pFile^,iSize);
  FileClose(iHandle);
 end;
 finally
 begin
 freemem(pFile);
 end;
 end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
NMUDP2.RemoteHost:='127.0.0.1';
NMUDP1.RemoteHost:='127.0.0.1';
end;

procedure TForm1.NMUDP1DataSend(Sender: TObject);
begin
Label1.Caption:='Data Sent';
end;

procedure TForm1.NMUDP2DataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
var
   iHandle,iRecv:longint;
  pFile :pchar;
  strFileName:String;
begin
 Label2.Caption:='Data Receive';
try
 begin
  if(SaveDialog1.Execute) then
   begin
    strFileName:=SaveDialog1.FileName;
   end;
  if(FileExists(strFileName))  then
   begin
    iHandle:=FileOpen(strFileName,fmOpenWrite);

   end
  else
   begin
    iHandle:=FileCreate(strFileName);
   end;
  getmem(pFile ,NumberBytes);
  NMUDP2.ReadBuffer(pFile^,NumberBytes);
  FileWrite(iHandle,pFile^,NumberBytes);
  FileClose(iHandle);
 end;
 finally
 begin
  freemem(pFile);
 end;
end;

end;

end.

----------------------------------------------
按此在新窗口浏览图片
按此在新窗口浏览图片
作者:
男 jackken (jackken) ★☆☆☆☆ -
普通会员
2003/10/18 16:32:05
2楼: 叮叮?看到我眼都大了。看算法是把文件的指针给SendBuffer作参数吧。但bios仁兄在程序前面的那段话又是什么意思?所给的算法没涉及什么排列规则吧,还是我看漏了。另外还想请教,做网络通信程序怎么调试?只有一台机阿。是不是自己如上面那样做两个控件自发,自收,自己显示。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行70.3125毫秒 RSS