Delphi的Indy通信中发送流文件的注意事项
客户端发送流到服务器端有几种方式,这里讨论两种:
1.客户端连接到服务器后,发送一个流,服务器接收一个流。
{*------------------------------------------------------------------------------
客户端发送流,假定已经建立连接
------------------------------------------------------------------------------*}
procedure TClientForm.Button3Click(Sender: TObject);
var s: string; stream: TStream;
begin
try
s := 'Hello world!';
stream := TStringStream.Create(s);
IdTCPClient1.OpenWriteBuffer;
IdTCPClient1.WriteInteger(stream.Size);//注意这里:要先写入流的长度,在读取的时候如果使用 AThread.Connection.ReadStream(stream);
IdTCPClient1.WriteStream(stream, true);
finally
IdTCPClient1.CloseWriteBuffer;
stream.Free;
end;
end;
{*------------------------------------------------------------------------------
服务器接收流
------------------------------------------------------------------------------*}
procedure TServerForm.IdTCPServer1Execute(AThread: TIdPeerThread);
var stream: Tstream;
begin
if not AThread.Terminated and AThread.Connection.Connected then
begin
stream := TStringStream.Create('');
AThread.Connection.ReadStream(stream);//这句相当于ReadStream(stream,-1,false),就是根据流的前四个字节读出流长度,然后再将流读出
stream.Position := 0;
Memo1.Lines.LoadFromStream(stream);
end;
end;
2.客户端连接到服务器后,发送一个或多个流,当断开的时候,服务器将所有流合并在一起接收。
{*------------------------------------------------------------------------------
客户端发送流,假定还未建立连接
------------------------------------------------------------------------------*}
procedure TClientForm.Button3Click(Sender: TObject);
var s: string; stream: TStream;
begin
IdTCPClient1.Connect;
try
s := 'Hello world!';
stream := TStringStream.Create(s);
IdTCPClient1.OpenWriteBuffer;
IdTCPClient1.WriteStream(stream, true);
finally
IdTCPClient1.CloseWriteBuffer;
stream.Free;
IdTCPClient1.Disconnect;
end;
end;
{*------------------------------------------------------------------------------
服务器接收流
------------------------------------------------------------------------------*}
procedure TServerForm.IdTCPServer1Execute(AThread: TIdPeerThread);
var stream: Tstream;
begin
if not AThread.Terminated and AThread.Connection.Connected then
begin
stream := TStringStream.Create('');
AThread.Connection.ReadStream(stream,-1,true);//当断开连接时候接收流
stream.Position := 0;
Memo1.Lines.LoadFromStream(stream);
end;
end;
转载于:https://www.cnblogs.com/djbone/archive/2009/03/18/1415933.html
Delphi的Indy通信中发送流文件的注意事项相关推荐
- qt5中服务器文件传输,POST在Qt5中发送JSON文件的请求
在Qt5的帮助下,通过POST请求将JSON文件发送到服务器时有点问题.我给你一张我的程序:POST在Qt5中发送JSON文件的请求 #include #include #include #inclu ...
- php curl form-data,在php curl multipart / form-data请求中发送一个文件和json数据
我正在尝试在PHP的curl请求中上传文件和json数据 . 请求在命令行中使用curl正常工作 . 这是命令行中的curl请求: curl -v --basic -u'username' -F fi ...
- 千兆通信中发送链路的 CRC 模块和 ODDR 模块实现
设计任务: 使用 FPGA 来构建 MAC 层和 UDP 组包,完成从板卡到主机的数据包传递链路. 项目目的: 通过学习以太网的 UDP 帧协议,完成包的构建和使用网络抓包工具抓包分析数据包是否正确. ...
- delphi用indy实现php后台的文件上传下载
indy控件使用方便,用indy来下载的资料网上很好找.因业务需要使用了indy上传,php后台来接收文件.主要代码如下: delphi: uses IdMultipartFormData 单元 Po ...
- Visual Studio 2010中添加App_Code文件夹注意事项
默认情况下,VS2010中新建的WebApplication中是没有App_Code文件夹的,若需要使用,可以自己手动添加文件夹,然后将文件夹名称设置为App_Code,然后在该文件夹添加需要的类即可 ...
- php接收文件,如何通过php 发送与接收流文件
php 发送与接收流文件 sendStreamFile.php 把文件以流的形式发送 receiveStreamFile.php 接收流文件并保存到本地 sendStreamFile.php<? ...
- php接收流文件,PHP传输文件流及文件流的保存
什么是文件流 在HTTP数据传送过程中,传输一方直接以二进制流方式传送文件内容,这样就形成了一个文件流: 文件流的接收通常涉及到预定义变量函数 $HTTP_RAW_POST_DATA 和 file_g ...
- QQ邮箱怎么发送文件夹 怎样在QQ邮箱里发送压缩文件夹
有很多用户想要知道怎么样才能通过QQ邮箱来发送自己的一些文件压缩包,应该怎么操作呢?不要慌,现在小编就给大家分享一下,下面一起来学习操作步骤吧! 其实,无论何种邮箱都无法发送文件夹,都只能对文件进行操 ...
- delphi indy_使用Delphi和Indy发送电子邮件(和附件)
delphi indy Below are instructions for creating an "email sender" that includes an option ...
- gRPC python实现文件上传,以及使用流式通信上传超大文件
通过gRPC接口上传文件的优点 使用gRPC上传文件有许多优点: 实现简单.就是简单地写个接口,而且rprotobuf 定义好了参数,Server端与Client对接方便 无须部署额外软件.生产环境不 ...
最新文章
- jsp 插入mysql乱码_JSP MySQL插入数据时出现中文乱码问题的解决方法
- Hadoop streaming: Exception in thread main java.io.IOException: No space left on device
- 这样给面试官解释约瑟夫环问题的几种巧妙解法,面试官满意的笑了
- Python_ collections_defaultdict默认字典
- 视频播放器的极致体验优化
- 7. Adapter
- 谈谈我对MVC的View层实现的理解
- LeetCode题库整理【Java】—— 2 两数相加
- 制作U盘启动盘之Ubuntu
- golang使用Nsq
- golang刷Leetcode系列 --- 实现strStr()
- 解混淆/脱壳工具 - De4dot
- 【设计模式】设计模式总览-----程序员的九阳神功
- 传统软件厂商生存模式推演
- atcoder abc242 c题 1111gal password
- python用一维数组存储学号和成绩_用一维数组存储学号和成绩,然后,按成绩排序输出...
- 数据分析找不到数据?200个源数据网站全给你!
- solidity 入门
- 六年级下册第二单元计算机,六年级下册语文第二单元作文(精选10篇)
- 哈工大软件构造Lab2实验
热门文章
- android的环境搭建与配置
- mysql改根用户_MySQL数据库中复位根用户密码的方法 | 很文博客
- 完成该操作所需的数据还不可使用_面试官:如何保障数据库和redis缓存的一致性...
- teablue数据分析_Bluetea蓝茶的品牌该如何分析,你知道吗
- 模型选择 + 过拟合和欠拟合 动手学深度学习v2 pytorch
- Mac OS 开启三指拖移,三指缩放,拖拽窗口,切换全面页面变成四指
- WWDC2019最值得看的十个视频
- 单片机用C语言锯齿波,试用c语言编写一个能输出锯齿波信号的单片机c51程序
- 标签系统 -- 用户画像
- ajax每次只加载3张图片,使用加载图片解决在Ajax数据加载中页面出现短暂空白的问题(推荐)...