IDTCPClient/Server问题
- Delphi(Pascal) code
//接收代码 Len := 0; AThread.Connection.ReadBuffer(Len, SizeOf(Buf)); Len := ntohs(Len); Buf.Text := AThread.Connection.ReadString(Len); //执行到这就跑了 为什么? FStream := TFileStream.Create('D:\Test\' + Buf.Values['FileName'],fmCreate); AThread.Connection.ReadStream(FStream, StrToInt(Buf.Values['Size']), False); mmoLog.Lines.Add(Buf.Text);
- Delphi(Pascal) code
//发送代码 sFileName := RightPartTwo(sFileNames[i], '\'); FStream := TFileStream.Create(sFileNames[i], fmOpenRead); Insert(frmMain.mmoLog.Lines.Count, FRequest.Text); FResponse.Clear; FResponse.Add('[Response]'); FResponse.Add('Command=SaveData'); FResponse.Add('FileName=' + sFileName); FResponse.Add('Size=' + IntToStr(FStream.Size)); FResponse.Add('Result=OK'); SendResponse; FClient.WriteStream(FStream, True, False, FStream.Size); FStream.Free;procedure TClientThread.SendResponse;var Len: Integer; Stream: TStringStream;begin Stream := TStringStream.Create(''); Len := Length(FResponse.Text); Len := htons(Len); Stream.WriteBuffer(Len, SizeOf(Len)); Stream.WriteString(FResponse.Text); FClient.WriteStream(Stream); Stream.Free;end;
请问这样的接受/发送代码有没有问题呢?
执行到我注释的地方就不往下执行了
[解决办法]
怎么发的怎么收,你用readstring收的话一定要用writestring发,要不就要手工最后加上回车换行,不然收了就跑飞,因为他停不下来,一直在等待,一般都用对应的函数,收发