D
drummer
Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾,我学着写一个抓屏程序,数据用socket传送。为什么会出现流的长度会少
一个我自己定义的发送长度?请各位大虾帮我看看下面的代码,问题在哪里。多谢!!
发送端,serverSocket的OnClientRead事件:
procedure TForm1.ssClientRead(Sender: TObject;Socket: TCustomWinSocket);
var
str,ss:string;
Buf:array[0..BufSize-1] of char;
begin
sb.Panels[0].text:=socket.RemoteAddress;
sb.Panels[1].text:=inttostr(socket.RemotePort);
str:=socket.ReceiveText;
if str='get' then
begin //cature screen
SnapScreen; //截屏,生成一个jpg流数据jpgstream.
LeftSize:=jpgstream.Size;
jpgstream.Position:=0;
ss:=inttostr(jpgstream.size);
Socket.SendText(inttostr(jpgstream.size)); //将要发送的流的长度
jpgstream.Position:=0;
end
else if str='ok' then //客户端准备好接收流。
begin
LeftSize:=LeftSize-BufSize;
if LeftSize>bufsize then //每次发送的长度bufsize=2048.
begin
jpgstream.readBuffer(buf,bufsize);
Socket.SendBuf(buf,bufsize);
m1.write(buf,bufsize); //m1,测试用的一个流变量
end
else if (leftsize<bufsize) and (leftsize>0) then
begin //这里不会收到'ok',服务端决定的
socket.sendbuf(buf,leftsize);
m1.write(buf,leftsize);
m1.SaveToFile('c:/ttt.jpg');//这里出错,总是比原来的流长度少一个bufSize.
jpgstream.clear;
end;
end;
end;
一个我自己定义的发送长度?请各位大虾帮我看看下面的代码,问题在哪里。多谢!!
发送端,serverSocket的OnClientRead事件:
procedure TForm1.ssClientRead(Sender: TObject;Socket: TCustomWinSocket);
var
str,ss:string;
Buf:array[0..BufSize-1] of char;
begin
sb.Panels[0].text:=socket.RemoteAddress;
sb.Panels[1].text:=inttostr(socket.RemotePort);
str:=socket.ReceiveText;
if str='get' then
begin //cature screen
SnapScreen; //截屏,生成一个jpg流数据jpgstream.
LeftSize:=jpgstream.Size;
jpgstream.Position:=0;
ss:=inttostr(jpgstream.size);
Socket.SendText(inttostr(jpgstream.size)); //将要发送的流的长度
jpgstream.Position:=0;
end
else if str='ok' then //客户端准备好接收流。
begin
LeftSize:=LeftSize-BufSize;
if LeftSize>bufsize then //每次发送的长度bufsize=2048.
begin
jpgstream.readBuffer(buf,bufsize);
Socket.SendBuf(buf,bufsize);
m1.write(buf,bufsize); //m1,测试用的一个流变量
end
else if (leftsize<bufsize) and (leftsize>0) then
begin //这里不会收到'ok',服务端决定的
socket.sendbuf(buf,leftsize);
m1.write(buf,leftsize);
m1.SaveToFile('c:/ttt.jpg');//这里出错,总是比原来的流长度少一个bufSize.
jpgstream.clear;
end;
end;
end;