【图像处理高级编程】-图像传输

文章目录

图像传输

提示:首先安装需要的组件,安装 TServerSocket 和TClientSocket
步奏如下
To install the socket components:

Select Component > Install Packages.
In the Install Packages dialog box, click Add.
In the Add Design Package dialog, browse to C:\Program Files (x86)\Embarcadero\Studio\19.0\bin.
Select dclsockets250.bpl, and click Open.
Click OK to dismiss Install Packages dialog.
The socket components (TClientSocket and TServerSocket) are listed in the Internet category of the Toot Palette.

请添加图片描述

核心源码

提示:客户端
const
BufSize = 2048;

var
MyPicture: TMyPicture;
MyStream: TMemoryStream;
LeftSize: integer;

implementation

{$R *.dfm}

procedure TMyPicture.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
var
str: string;
begin
Self.StatusBar1.Font.Color := clred;
str := DateToStr(Date) + ’ ’ +
TimeToStr(Time) + ‘==>>’ + ‘和主机’ + Socket.RemoteHost +
‘连接成功’;
self.StatusBar1.Panels[1].Text := str;
end;

procedure TMyPicture.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
errorcode := 0;
CLientSocket1.Socket.Close;
end;

procedure TMyPicture.GetFileReady;
begin
MyStream.Clear;
MyStream.LoadFromFile(OpenDialog1.FileName);
MyStream.Position := 0;
leftSize := MyStream.Size;
end;

procedure TMyPicture.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
rstr: string;

// 接受到主机的信息
begin
{ rcvtxt := Socket.ReceiveText;
if MyStream.Size = 0 then
begin
bmp := TBitmap.Create;
jpg := Tjpegimage.Create;
bmp.Assign(image1.Picture.Bitmap);
jpg.Assign(bmp);
jpg.CompressionQuality := 10;
MyStream.LoadFromStream(MyStream);
// MyStream.Position := 0;
end
else
left := size - count;
if rcvtxt = ‘go’ then
begin
if sizeof(buf) < left then
begin
MyStream.Read(buf, sizeof(buf));
Socket.SendBuf(buf, sizeof(buf));
count := count + sizeof(buf);
end
else
begin
MyStream.Read(buf, left);
Socket.SendBuf(buf, left);
end;
end;
if rcvtxt = ‘stop’ then
MyStream.Clear; }
rstr := socket.ReceiveText;
// Socket.ReceiveText用于接受来自主机的信息
if (rstr = ‘go’) then
begin
SendFilePart();
// 如果接受到’go’,则调用发送文件函数,文件可以包括图片,文件等
end;
if (rstr = ‘stop’) then
begin
MyStream.Clear;
// 清空内存流
MyStream.SetSize(0);
end;
end;

function TMyPicture.GetFileSize(const FileName: string): integer;
var
f: TfileStream;
begin
f := TfileStream.Create(FileName, fmopenRead or fmShareDenyNone);
// 动态创建FileName的文件流
Result := f.Size;
// 获得文件流的大小,并作为返回值
F.free;
// 释放文件流
end;

procedure TMyPicture.SendFilePart;
var
SendSize: longint;
// 待发送的字节大小
Buf: array[0…BufSize - 1] of char;
// 设立一块2K的字符缓冲区
begin
if MyStream.Size = 0 then
GetFileReady();
// 内存流大小为0,则读取文件
if LeftSize > BufSize then
SendSize := BufSize
// 余下的文件大小>2K ,则发送BufSize(2k)大小字节
else
SendSize := LeftSize;
// 余下的文件不足2K,则全部发送完
MyStream.ReadBuffer(Buf, SendSize);
// 把文件为内存流写入缓冲区
LeftSize := LeftSize - SendSize;
// LeftSize 标志剩余字节数
if LeftSize = 0 then
begin
MyStream.Clear;
// 全部发送,则清空内存流
end;
try
ClientSocket1.Socket.SendB

  • 16
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大龙软件研发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值