首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TClientSocket : SendBuffer和SendStream有什么区别?

TClientSocket : SendBuffer和SendStream有什么区别?
EN

Stack Overflow用户
提问于 2011-07-13 00:44:41
回答 3查看 3.4K关注 0票数 2

大家好,我有一个任务是实现一个与服务器通信的协议。我有一个进退两难的境地,也许某个足够熟练的人可以启发我连接到服务器,我必须发送一个字节数组,问题是当我使用这个时,我从服务器断开了连接:

代码语言:javascript
复制
  var 
   buffer : array [0..200] of byte;
   begin
   ClientSocket1.Socket.SendBuf(buffer[0],length(buffer));
   end;

但是当我使用这个的时候,它工作得很好:

代码语言:javascript
复制
   var 
   buffer : array [0..200] of byte;
   mem_ste : TMemoryStream;
   begin
   mem_ste := TMemoryStream.Create;
   mem_ste.Write(buffer[0],length(buffer));
   ClientSocket1.Socket.SendStream(mem_ste);
   end;

有没有什么合理的理由请告诉我。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-13 03:20:52

在第一个代码中,您发送的是201字节的未初始化垃圾,所以难怪服务器会踢您。

在第二段代码中,您将201字节的未初始化垃圾写入到一个流中,但随后没有通过套接字发送任何内容,因为流的当前Position属性仍然位于流的末尾--没有什么可发送的。SendStream从当前流位置开始读取,直到它到达末尾。

票数 4
EN

Stack Overflow用户

发布于 2011-07-13 00:59:27

SendBuf中是否存在异常的可能性?Delphi帮助包含以下内容:

如果在写入连接时发生错误,SendBuf将终止连接并引发ESocketError异常。

另一个想法--你的套接字是在阻塞模式下吗?否则,如果未在onWrite事件处理程序中调用,则SendBuf可能会失败。

票数 0
EN

Stack Overflow用户

发布于 2011-07-13 01:03:26

使用SendBuf()没有任何问题(假设数据本身是准确的),所以问题一定与其他因素有关。是否触发了OnError事件?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6667862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档