关于socket中ctNonBlocking与ctBlocking的问题求教(100分)

  • 主题发起人 hellmester
  • 开始时间
H

hellmester

Unregistered / Unconfirmed
GUEST, unregistred user!
初学socket编程,自己写了一个简单的ctNonBlocking程序,想法是把sever发来的数据连接在一起,存储在array中,程序段如下
procedure TForm1.RemoteSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
var
temp: array [0..500] of byte;
length:integer;
i:integer;
begin

length:=RemoteSocket.Socket.ReceiveLength;
RemoteSocket.Socket.ReceiveBuf(temp,length);

for i:=msgIn_length to msgIn_length+length do
msgIn:=temp[i-msgIn_length];

msgIn_length:=msgIn_length+length;

//测验用的显示代码
for i:=0 to msgIn_lengthNow do
Memo.Lines.Add(Inttostr(msgIn));
end;

可是该段代码无法正常工作,当sever连续发送报文过来,在memo中只显示了第一报文的一部分~然后程序就卡住了~弹出错误。我分析是delphi执行速度不够快,第一段报文还没有保存显示完,第二段就发过来造成这种线程之间的错误。不知该如何解决这种问题~望高手指点。~

如果我采用ctBlocking模式~我该如何知道server段有报文发过来呢?然后主动去读。还是说我应该不断读socket,读不到东西就代表server没有报文法给我??
 
好象你可以在接受到SEVER发来的报文后给SERVER发个确认的标志,然后才允许SEVER继续发,
否则就禁止发,应该就可以解决
 

Similar threads

回复
0
查看
658
不得闲
D
回复
0
查看
790
DelphiTeacher的专栏
D
顶部