一下的代码。我原本在d5下可以通过的。但是现在换了d7.编译可以通过。但是运行没反应。请各位指教~~~!!client端
procedure Tform1.TcpClient1Receive(Sender: TObject; Buf: PAnsiChar;
var DataLen: Integer);
var
MyBuffer: array[0..10000] of byte; {设置接收缓冲区}
MyReceviceLength: integer;
S: string;
MyBmp: TBitmap;
MyJpg: TJpegimage;
begin
StatusBar1.SimpleText := '正在接收数据......';
if MySize = 0 then {MySize为服务端发送的字节数,如果为0表示为尚未开始图象接收}
begin
S := tcpclient1.Receiveln;
MySize := Strtoint(S); {设置需接收的字节数}
TcpClient1.Sendln('ready'); {发指令通知服务端开始发送图象}
end
else
begin {以下为图象数据接收部分}
MyReceviceLength := tcpclient1.BytesReceived; {读出包长度}
StatusBar1.SimpleText := '正在接收数据,数据大小为:' + inttostr(MySize);
tcpclient1.ReceiveBuf(MyBuffer, MyReceviceLength); {接收数据包并读入缓冲区内}
MyStream.Write(MyBuffer, MyReceviceLength); {将数据写入流中}
if MyStream.Size >= MySize then {如果流长度大于需接收的字节数,则接收完毕}
begin
MyStream.Position := 0;
MyBmp := tbitmap.Create;
MyJpg := tjpegimage.Create;
try
MyJpg.LoadFromStream(MyStream); {将流中的数据读至JPG图像对象中}
MyBmp.Assign(MyJpg); {将JPG转为BMP}
StatusBar1.SimpleText := '正在显示图像';
form1.Image1.Picture.Bitmap.Assign(MyBmp); {分配给image1元件 }
form1.Image1.Picture.Bitmap.Assign(MyBmp);
finally {以下为清除工作 }
MyBmp.free;
MyJpg.free;
TcpClient1.Sendln('cam');
MyStream.Clear;
MySize := 0;
end;
end;
end;
end;
server端procedure TForm1.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
var
s:string; //接受的指令
s1:string; //字符型后的流
MyBmp: TBitmap;
Myjpg: TJpegimage;
MyStream: TMemorystream;//内存流对象beginS := clientsocket.Receiveln;if s='cam'then //屏幕
begin
try
MyStream := TMemorystream.Create;{建立内存流}
MyBmp := TBitmap.Create;
Myjpg := TJpegimage.Create;
Cjt_GetScreen(MyBmp, True); {True表示抓鼠标图像}
Myjpg.Assign(MyBmp); {将BMP图象转成JPG格式,便于在互联网上传输}
Myjpg.CompressionQuality := 50; {JPG文件压缩百分比设置,数字越大图像越清晰,但数据也越大}
Myjpg.SaveToStream(MyStream); {将JPG图象写入流中}
Myjpg.free;
MyStream.Position := 0;{注意:必须添加此句}
s1 := inttostr(MyStream.size);{流的大小}
Tcpserver1.Sendln(s1); {发送流大小}
finally
MyBmp.free;
end;
end;
if s = 'ready' then {客户端已准备好接收图象}
begin
MyStream.Position := 0;
tcpserver1.SendStream(MyStream); {将流发送出去}
end;
procedure Tform1.TcpClient1Receive(Sender: TObject; Buf: PAnsiChar;
var DataLen: Integer);
var
MyBuffer: array[0..10000] of byte; {设置接收缓冲区}
MyReceviceLength: integer;
S: string;
MyBmp: TBitmap;
MyJpg: TJpegimage;
begin
StatusBar1.SimpleText := '正在接收数据......';
if MySize = 0 then {MySize为服务端发送的字节数,如果为0表示为尚未开始图象接收}
begin
S := tcpclient1.Receiveln;
MySize := Strtoint(S); {设置需接收的字节数}
TcpClient1.Sendln('ready'); {发指令通知服务端开始发送图象}
end
else
begin {以下为图象数据接收部分}
MyReceviceLength := tcpclient1.BytesReceived; {读出包长度}
StatusBar1.SimpleText := '正在接收数据,数据大小为:' + inttostr(MySize);
tcpclient1.ReceiveBuf(MyBuffer, MyReceviceLength); {接收数据包并读入缓冲区内}
MyStream.Write(MyBuffer, MyReceviceLength); {将数据写入流中}
if MyStream.Size >= MySize then {如果流长度大于需接收的字节数,则接收完毕}
begin
MyStream.Position := 0;
MyBmp := tbitmap.Create;
MyJpg := tjpegimage.Create;
try
MyJpg.LoadFromStream(MyStream); {将流中的数据读至JPG图像对象中}
MyBmp.Assign(MyJpg); {将JPG转为BMP}
StatusBar1.SimpleText := '正在显示图像';
form1.Image1.Picture.Bitmap.Assign(MyBmp); {分配给image1元件 }
form1.Image1.Picture.Bitmap.Assign(MyBmp);
finally {以下为清除工作 }
MyBmp.free;
MyJpg.free;
TcpClient1.Sendln('cam');
MyStream.Clear;
MySize := 0;
end;
end;
end;
end;
server端procedure TForm1.TcpServer1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
var
s:string; //接受的指令
s1:string; //字符型后的流
MyBmp: TBitmap;
Myjpg: TJpegimage;
MyStream: TMemorystream;//内存流对象beginS := clientsocket.Receiveln;if s='cam'then //屏幕
begin
try
MyStream := TMemorystream.Create;{建立内存流}
MyBmp := TBitmap.Create;
Myjpg := TJpegimage.Create;
Cjt_GetScreen(MyBmp, True); {True表示抓鼠标图像}
Myjpg.Assign(MyBmp); {将BMP图象转成JPG格式,便于在互联网上传输}
Myjpg.CompressionQuality := 50; {JPG文件压缩百分比设置,数字越大图像越清晰,但数据也越大}
Myjpg.SaveToStream(MyStream); {将JPG图象写入流中}
Myjpg.free;
MyStream.Position := 0;{注意:必须添加此句}
s1 := inttostr(MyStream.size);{流的大小}
Tcpserver1.Sendln(s1); {发送流大小}
finally
MyBmp.free;
end;
end;
if s = 'ready' then {客户端已准备好接收图象}
begin
MyStream.Position := 0;
tcpserver1.SendStream(MyStream); {将流发送出去}
end;
解决方案 »
- delphi备份与恢复的问题?请大家帮我看下代码
- image 中导入图片的函数是什么?
- 谁有marc标准啊,急求
- 非常简单问题
- 如何实现delphi6自带报表REPORT控件数据库中的数据根据自定义的行数进行翻页,急!!!
- 请问哪能下载到delphi7,本人初次接触delphi,谢谢帮助
- 又多了一个角,财去人安乐~
- ADO TABLE 中的DATAFIELD 的验证
- 请问那里有象QQ一样的控件下载呀,谢谢,给分30
- 怎样在TImage中加入鼠标点击坐标?及对图像做裁剪?
- delphi做的dll窗体用panel显示不能用Splitter动态变化大小
- 有程序员炒股票么?有人用过一些股票软件么?股票软件到底有多么复杂?您认为它有多复杂?或者您觉得不值一提。(讨论)
const
MP_Read='1'; //--准备发送数据
MP_Info='2'; //--发送的数据信息
Mp_Data='3'; //--发送数据
----------Server----------------
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
linkcmd:string;
Mybmp: Tbitmap;
//Buf:pointer;
buf:array[1..8192] of byte;
sendsize: integer; //每次发送的大小
bufsize:integer;begin
linkcmd:=trim(Socket.ReceiveText);
case linkcmd[1] of
MP_Read:
begin
MyStream := TMemoryStream.Create;
MyJpg:=Tjpegimage.Create;
Mybmp := TBitmap.Create;
GetScreen(mybmp);
//bmpmap.PixelFormat :=pf8bit; //监看颜色降至为256色
Myjpg.Assign(MyBmp); {将BMP图象转成JPG格式,便于在互联网上传输}
Myjpg.CompressionQuality := 50; {JPG文件压缩百分比设置,数字越大图像越清晰,但数据也越大}
image1.Picture.Assign(myjpg); //--显示取得的图
//image1.Picture.Bitmap.Assign(mybmp);
MyStream.Clear;
Myjpg.SaveToStream(MyStream); {将JPG图象写入流中}
Myjpg.free;
Jpgsize:=mystream.Size;
socket.SendText(Mp_Info+inttostr(jpgsize));
mystream.SaveToFile('c:\temp\55.jpg');
mystream.Position:=0;
edit2.Text:=inttostr(jpgsize);
fssize:=0; //--传送字节数置0
MyBmp.free;
end;
MP_Data:
begin
bufsize:=sizeof(buf);
if JpgSize > BufSize then
SendSize := BufSize
else
SendSize := JpgSize;
mystream.ReadBuffer(Buf, SendSize);
JpgSize := JpgSize - SendSize;
fssize:=fssize+sendsize;
edit3.Text :=inttostr(fssize);
if JpgSize = 0 then
begin
MyStream.Clear; { 清空流 }
MyStream.Free;
end;
socket.SendBuf(buf,SendSize); { 将数据发到主控机 }
end;
end;
end;
----------Client----------------
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
myjpg:tjpegimage;
ilen:integer;
buf:array[1..8192] of byte ;
BufSize:integer;
scmd:string;
begin
if bReadText then
begin
scmd:=socket.ReceiveText;
if scmd[1]=MP_Info then
begin
ilen:=length(scmd);
jpgsize:=strtoint(copy(scmd,2,ilen-1));
edit3.Text:=inttostr(jpgsize); //--显示所接收的总字节数
mystream:=TMemorystream.Create;
mystream.clear;
socket.SendText(Mp_Data);
bReadText:=false;
end;
end
else
begin
BufSize:=sizeof(buf);
if jpgsize > BufSize then
RecSize := BufSize
else
RecSize := jpgsize;
socket.ReceiveBuf(buf, RecSize);
jpgSize := jpgSize - RecSize;
edit4.Text:=inttostr(jpgsize); //--显示还剩余的字节数
mystream.WriteBuffer(buf,recsize);
if jpgsize = 0 then //读完数据
begin
mystream.Position := 0;
myjpg:=Tjpegimage.Create;
myjpg.LoadFromStream(MyStream); {将流中的数据读至JPG图像对象中}
image1.Picture.Assign(myjpg); //--显示图片
mystream.SaveToFile('c:\temp\555.jpg'); //--将收到的图片临时保存
end
else
socket.SendText(MP_data);
end;
end;