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阿。好像每次收到一个报文内存好像就清空了,下一个报文来了,但是前一个报文的数据却没有了,我该怎么搞啊???????
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阿。好像每次收到一个报文内存好像就清空了,下一个报文来了,但是前一个报文的数据却没有了,我该怎么搞啊???????
我在客户端发送图片给服务器端,接收的时候出错,代码如下:
我用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;