客户端发送流到服务器端有几种方式,这里讨论两种:

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通信中发送流文件的注意事项相关推荐

  1. qt5中服务器文件传输,POST在Qt5中发送JSON文件的请求

    在Qt5的帮助下,通过POST请求将JSON文件发送到服务器时有点问题.我给你一张我的程序:POST在Qt5中发送JSON文件的请求 #include #include #include #inclu ...

  2. php curl form-data,在php curl multipart / form-data请求中发送一个文件和json数据

    我正在尝试在PHP的curl请求中上传文件和json数据 . 请求在命令行中使用curl正常工作 . 这是命令行中的curl请求: curl -v --basic -u'username' -F fi ...

  3. 千兆通信中发送链路的 CRC 模块和 ODDR 模块实现

    设计任务: 使用 FPGA 来构建 MAC 层和 UDP 组包,完成从板卡到主机的数据包传递链路. 项目目的: 通过学习以太网的 UDP 帧协议,完成包的构建和使用网络抓包工具抓包分析数据包是否正确. ...

  4. delphi用indy实现php后台的文件上传下载

    indy控件使用方便,用indy来下载的资料网上很好找.因业务需要使用了indy上传,php后台来接收文件.主要代码如下: delphi: uses IdMultipartFormData 单元 Po ...

  5. Visual Studio 2010中添加App_Code文件夹注意事项

    默认情况下,VS2010中新建的WebApplication中是没有App_Code文件夹的,若需要使用,可以自己手动添加文件夹,然后将文件夹名称设置为App_Code,然后在该文件夹添加需要的类即可 ...

  6. php接收文件,如何通过php 发送与接收流文件

    php 发送与接收流文件 sendStreamFile.php 把文件以流的形式发送 receiveStreamFile.php 接收流文件并保存到本地 sendStreamFile.php<? ...

  7. php接收流文件,PHP传输文件流及文件流的保存

    什么是文件流 在HTTP数据传送过程中,传输一方直接以二进制流方式传送文件内容,这样就形成了一个文件流: 文件流的接收通常涉及到预定义变量函数 $HTTP_RAW_POST_DATA 和 file_g ...

  8. QQ邮箱怎么发送文件夹 怎样在QQ邮箱里发送压缩文件夹

    有很多用户想要知道怎么样才能通过QQ邮箱来发送自己的一些文件压缩包,应该怎么操作呢?不要慌,现在小编就给大家分享一下,下面一起来学习操作步骤吧! 其实,无论何种邮箱都无法发送文件夹,都只能对文件进行操 ...

  9. delphi indy_使用Delphi和Indy发送电子邮件(和附件)

    delphi indy Below are instructions for creating an "email sender" that includes an option ...

  10. gRPC python实现文件上传,以及使用流式通信上传超大文件

    通过gRPC接口上传文件的优点 使用gRPC上传文件有许多优点: 实现简单.就是简单地写个接口,而且rprotobuf 定义好了参数,Server端与Client对接方便 无须部署额外软件.生产环境不 ...

最新文章

  1. jsp 插入mysql乱码_JSP MySQL插入数据时出现中文乱码问题的解决方法
  2. Hadoop streaming: Exception in thread main java.io.IOException: No space left on device
  3. 这样给面试官解释约瑟夫环问题的几种巧妙解法,面试官满意的笑了
  4. Python_ collections_defaultdict默认字典
  5. 视频播放器的极致体验优化
  6. 7. Adapter
  7. 谈谈我对MVC的View层实现的理解
  8. LeetCode题库整理【Java】—— 2 两数相加
  9. 制作U盘启动盘之Ubuntu
  10. golang使用Nsq
  11. golang刷Leetcode系列 --- 实现strStr()
  12. 解混淆/脱壳工具 - De4dot
  13. 【设计模式】设计模式总览-----程序员的九阳神功
  14. 传统软件厂商生存模式推演
  15. atcoder abc242 c题 1111gal password
  16. python用一维数组存储学号和成绩_用一维数组存储学号和成绩,然后,按成绩排序输出...
  17. 数据分析找不到数据?200个源数据网站全给你!
  18. solidity 入门
  19. 六年级下册第二单元计算机,六年级下册语文第二单元作文(精选10篇)
  20. 哈工大软件构造Lab2实验

热门文章

  1. android的环境搭建与配置
  2. mysql改根用户_MySQL数据库中复位根用户密码的方法 | 很文博客
  3. 完成该操作所需的数据还不可使用_面试官:如何保障数据库和redis缓存的一致性...
  4. teablue数据分析_Bluetea蓝茶的品牌该如何分析,你知道吗
  5. 模型选择 + 过拟合和欠拟合 动手学深度学习v2 pytorch
  6. Mac OS 开启三指拖移,三指缩放,拖拽窗口,切换全面页面变成四指
  7. WWDC2019最值得看的十个视频
  8. 单片机用C语言锯齿波,试用c语言编写一个能输出锯齿波信号的单片机c51程序
  9. 标签系统 -- 用户画像
  10. ajax每次只加载3张图片,使用加载图片解决在Ajax数据加载中页面出现短暂空白的问题(推荐)...