请教各位,问个Delphi中奇怪的问题:(0分)

  • 主题发起人 主题发起人 netbug
  • 开始时间 开始时间
N

netbug

Unregistered / Unconfirmed
GUEST, unregistred user!
我用TClientSocket与TServerSocket分别写了两个小程序,
这是服务器端的:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;Socket: TCustomWinSocket);
var cBuffer:array [1..4096] of char;
i,iLen:integer;
begin
memo1.Lines.Add(socket.receivetext);
iLen:=socket.ReceiveLength;
edit1.Text:=inttostr(ilen);
socket.ReceiveBuf(cBuffer,iLen);
edit2.Text:=cBuffer;
end;
第二个是客户端的:
procedure TForm1.ClientSocket1Write(Sender: TObject;
Socket: TCustomWinSocket);
begin
socket.SendText('hello');
end;
我在本地机做了测试,发现在服务器端memo1中有
收到客户端发送的字符串'hello',但令我感到
奇怪的是:在服务器端socket.ReceiveLength为0,
cBuffer也不是客户端发送的字符串'hello',
我想问:起码还有'hello',socket.ReceiveLength长度怎么会为0?
socket.receivetext与socket.ReceiveBuf
有什么不同吗?谢谢.
 
真的是很奇怪啊!我现在也在研究这个问题.
 
看看help中有关这两个函数的说明.

这两个函数都是针对non-block的socket的, 而且help没说明的是这两个函数
调用后系统会自动将接收缓冲区内的内容清空.

所以你在memo1.lines.add中已经recievetext过了, 着时候socket的接收缓冲区
中当然是空的了, 所以长度为0

recievetext和recievebuf的区别就是recievebuf可以接收中间包含#0的字符,
而recievetext一般只用来接收可显示字符串. 而且recievebuf没有溢出保护,
你必须确保buf分配了足够的空间.
 
接受答案了.
 

Similar threads

后退
顶部