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没有报文法给我??
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没有报文法给我??