大家好,我有一个任务是实现一个与服务器通信的协议。我有一个进退两难的境地,也许某个足够熟练的人可以启发我连接到服务器,我必须发送一个字节数组,问题是当我使用这个时,我从服务器断开了连接:
var
buffer : array [0..200] of byte;
begin
ClientSocket1.Socket.SendBuf(buffer[0],length(buffer));
end;但是当我使用这个的时候,它工作得很好:
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;有没有什么合理的理由请告诉我。谢谢。
发布于 2011-07-13 03:20:52
在第一个代码中,您发送的是201字节的未初始化垃圾,所以难怪服务器会踢您。
在第二段代码中,您将201字节的未初始化垃圾写入到一个流中,但随后没有通过套接字发送任何内容,因为流的当前Position属性仍然位于流的末尾--没有什么可发送的。SendStream从当前流位置开始读取,直到它到达末尾。
发布于 2011-07-13 00:59:27
在SendBuf中是否存在异常的可能性?Delphi帮助包含以下内容:
如果在写入连接时发生错误,SendBuf将终止连接并引发ESocketError异常。
另一个想法--你的套接字是在阻塞模式下吗?否则,如果未在onWrite事件处理程序中调用,则SendBuf可能会失败。
发布于 2011-07-13 01:03:26
使用SendBuf()没有任何问题(假设数据本身是准确的),所以问题一定与其他因素有关。是否触发了OnError事件?
https://stackoverflow.com/questions/6667862
复制相似问题