indy10 tcpserver 与tcpclient 发送的数据有的时候两个软件运行后能收发送数据 有的时候不能收发数据!经过抓包发现tcpserver正常发送数据!而tcpclinet接收数据不正常请大神指教!我把代码附 上: function Tform1.SendStreamToServer(Cmd:String): Boolean; var MyStream: TMemoryStream; t,i:integer; List:TList; begin
try MyStream:=TMemoryStream.Create; cmd:= EncodeString(cmd); MyStream.Write(Cmd[1],Length(Cmd)* SizeOf(Char)); MyStream.Position:=0; i:=MyStream.size; List:=idtcpserver1.contexts.locklist; for t:=0 to List.Count-1 do
begin
if tidcontext(List.items[t]).binding.Peerip = u then begin tidcontext(List.items[t]).Connection.IOHandler.LargeStream:=true; tidcontext(List.items[t]).Connection.IOHandler.WriteLn(IntToStr(MyStream.size)); tidcontext(List.items[t]).Connection.IOHandler.Write (MyStream,i);
end;
end;
Result := True; except // IdTcpServer1.Contexts.UnLockList; // CurrentThread.Connection.Disconnect; // AContext.Terminate; MyStream.Free; Result := False; end; MyStream.Free; end;
tcpclint代码:
procedure TClientHandleThread.Execute; var Thesize:Integer; ThtStr:String; RsltStream: TMemoryStream; RDStrList,RootDStrList:TStringList; begin while not Terminated do begin
try ThtStr:=Form1.IdTCPClient1.IOHandler.ReadLn(IndyTextEncoding_UTF8); Thesize:=Strtoint64def(ThtStr,0); if Thesize>0 then begin try RsltStream := TmemoryStream.Create; Form1.IdTCPClient1.IOHandler.LargeStream:=true; Form1.IdTCPClient1.IOHandler.ReadStream(RsltStream,Thesize); RsltStream.Position := 0; SetLength(CommandStr, RsltStream.Size); RsltStream.Read(CommandStr[1], RsltStream.Size); Form1.Label3.Text:=DecodeString(CommandStr); // CommandStr:=DecodeBase64(CommandStr); RsltStream.Free;