procedure TForm1.ssClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
socket.sendtext('again');
memo1.lines.add('ok1');
end;procedure TForm1.ssClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
  stream:Tmemorystream;
bufRecv:pointer;
  Count: Integer;
begin
   memo1.lines.add('ok2');
   count:=socket.receivelength;
   GetMem(bufRecv, Count);
   socket.receivebuf(bufrecv^,count);
   memo1.lines.add('ok3');
   stream:=TmemoryStream.Create;
   Stream.writebuffer(bufRecv^, Count);
   FreeMem(bufRecv);   memo1.lines.add('ok4');
   if  Count=bufsize then
       socket.SendText('again')
     else
       begin
           stream.Position:=0;
           adoquery1.append;
           Tblobfield(adoquery1.fieldbyname('body')).loadfromstream(stream);
          try
           adoquery1.Post;
           memo1.lines.add('ok8');
           finally           stream.free;
           memo1.lines.add('ok9');
           end;
       end;
end;end.
这个是Tserversocket的代码,我想让客户端发送一个文件给服务器端,服务器端收到后存到Tmemorystream中,等都收完后就保存到数据库中,可是我现在保存到数据库中的时候发现数据是0kb阿。好像每次收到一个报文内存好像就清空了,下一个报文来了,但是前一个报文的数据却没有了,我该怎么搞啊???????

解决方案 »

  1.   

    我也遇到类似的问题,
     我在客户端发送图片给服务器端,接收的时候出错,代码如下:
     我用indy中的idtcpserver和intcpclient控件,来传松图像
       server端代码是这样的
         procedure TForm2.FormCreate(Sender: TObject);
          begin
          IdTCPServer1.DefaultPort:=9000;
          IdTCPServer1.Active:=true;
         end;
        procedure TForm2.IdTCPServer1Execute(AThread: TIdPeerThread);
        var
        ja:tjpegimage;
        ss:TmemoryStream;
       begin
        ss:=TmemoryStream.Create;
        ja:=tjpegimage.Create;
        AThread.Connection.ReadStream(ss,-1,false);
        ja.LoadFromStream(ss);
        img1.Picture.Graphic.Assign(ja);
        ss.Free;
        ja.Free;
       end;
    //--------------------------------------------------------
      client端代码如下:
        
    procedure TForm1.btn1Click(Sender: TObject);
    var
      tempstream:TmemoryStream;
      bt:tjpegimage;
    begin
      bt:=tjpegimage.Create;
      tempstream:=TmemoryStream.Create;
      bt.LoadFromFile('e:\1.jpg');
      bt.SaveToStream(tempstream);
      tempstream.Position:=0;
      try
        if IdTCPClient1.Connected then
        begin
          IdTCPClient1.WriteStream(tempstream);
          //IdTcpClient1.Disconnect;
        end;
      finally
          tempstream.Free;
      end;end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      IdTCPClient1.Host:='192.168.1.23';
      IdTCPClient1.Port:=9000;
      IdTCPClient1.Connect();
    end;