网络图像传输问题,特急!!!高分奉送

wxjh 2002-07-24 12:52:49
编制的程序,包括客户端,和服务器端,我是在客户端抓到图片,压成jpe格式,有40多k吧,传输到服务器端,却无法接收到,我是使用流进行传输的,清高手指点
...全文
27 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hezchuan168 2002-08-03
  • 打赏
  • 举报
回复
这个问题不难?在DELPHI目录的DEMO上有个实例,delphi/demo/fastnet/strm
8341 2002-08-03
  • 打赏
  • 举报
回复
NMUDP有长度限制的,超过2k就完蛋了。建议使用udpclient/server,或NMStrmServ/client
azsoft 2002-08-03
  • 打赏
  • 举报
回复
gz
wxjh 2002-07-24
  • 打赏
  • 举报
回复
谢谢!
robinhunter 2002-07-24
  • 打赏
  • 举报
回复
uses
jpeg;

procedure TForm1.Button1Click(Sender: TObject);
var
dc:hdc;
bmp:tbitmap;
jpg:tjpegimage;
stream:tmemorystream;
begin
i:=gettickcount;
dc:=getdc(0);
bmp:=tbitmap.Create;
bmp.width:=screen.Width; bmp.height:=screen.height;
bitblt(bmp.canvas.handle,0,0,bmp.width,bmp.height,dc,0,0,srccopy);
releasedc(0,dc);
stream:=tmemorystream.Create;
jpg:=tjpegimage.Create;
jpg.grayscale:=true;
jpg.Assign(bmp);
jpg.SaveToStream(stream);
nmstrm1.PostIt(stream);
jpg.free;
stream.free;
bmp.free;
end;

procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
strm: TStream);
var
jpg:tjpegimage;
begin
jpg:=tjpegimage.Create;
jpg.LoadFromStream(strm);
image1.Picture.Bitmap.assign(jpg);
showmessage(inttostr(gettickcount-i));
end;
wxjh 2002-07-24
  • 打赏
  • 举报
回复
yansea(思宏) ,我们俩编写的源代码除了组件用的不同别的几乎都一样
wxjh 2002-07-24
  • 打赏
  • 举报
回复
我用的是clientsocket,serversocket ,能否给出这方面的例子
yansea 2002-07-24
  • 打赏
  • 举报
回复
我用的TNMUDP,
客户端:
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var CCode:array[0..3]of char; TmpStream : TMemoryStream;
SendSize : integer;
begin
NMUDP1.ReadBuffer(CCode,NumberBytes);
if CCode[0]='s' then
begin
TmpStream:=TMemoryStream.Create;
try
if BmpStream.Size=0 then
begin
BmpStream.Clear;
ScreenCap;
end;
if LeftSize>BufSize then SendSize:=BufSize else SendSize:=LeftSize;
//BmpStream.ReadBuffer(TmpStream,SendSize);
TmpStream.CopyFrom(BmpStream,SendSize);
LeftSize:=LeftSize-SendSize;
if LeftSize=0 then BmpStream.Clear;
NMUDP1.RemoteHost:=FromIP;
NMUDP1.SendStream(TmpStream);
finally
TmpStream.Free;
end;
end;
end;

服务器:
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var ReqCode : array[0..3] of char; Bit:TBitmap;
jpe: TJPEGImage;
begin
ReqCode:='show';
NMUDP1.ReadStream(TmpStream);
RsltStream.CopyFrom(Tmpstream,NumberBytes);
if NumberBytes<BufSize then
begin
RsltStream.Position:=0;
if flag='form1' then
begin
jpe:=TJPEGImage.Create;
Bit:=TBitmap.Create;
try
jpe.LoadFromStream(RsltStream);
Bit.Assign(jpe);
//Image1.Picture.Bitmap.LoadFromStream(RsltStream);
Image1.Picture.Bitmap:=Bit;
finally
jpe.Free;
Bit.Free;
end;
end else
if flag='form2' then
begin
jpe:=TJPEGImage.create;
Bit:=TBitmap.Create;
try
jpe.LoadFromStream(RsltStream);
Bit.Assign(jpe);
StretchBlt(form2.Canvas.Handle,0,0,screen.Width,screen.Height,
Bit.Canvas.Handle,0,0,600,450,srccopy);
form2.Show;
finally
Bit.Free;
jpe.free;
end;
end;
TmpStream.Clear;
RsltStream.Clear;
end else
begin
TmpStream.Clear;
NMUDP1.RemoteHost:=edit1.Text;
NMUDP1.SendBuffer(ReqCode,4);
end;
end;
yansea 2002-07-24
  • 打赏
  • 举报
回复
我用的TNMUDP,
客户端:
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var CCode:array[0..3]of char; TmpStream : TMemoryStream;
SendSize : integer;
begin
NMUDP1.ReadBuffer(CCode,NumberBytes);
if CCode[0]='s' then
begin
TmpStream:=TMemoryStream.Create;
try
if BmpStream.Size=0 then
begin
BmpStream.Clear;
ScreenCap;
end;
if LeftSize>BufSize then SendSize:=BufSize else SendSize:=LeftSize;
//BmpStream.ReadBuffer(TmpStream,SendSize);
TmpStream.CopyFrom(BmpStream,SendSize);
LeftSize:=LeftSize-SendSize;
if LeftSize=0 then BmpStream.Clear;
NMUDP1.RemoteHost:=FromIP;
NMUDP1.SendStream(TmpStream);
finally
TmpStream.Free;
end;
end;
end;

服务器:
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var ReqCode : array[0..3] of char; Bit:TBitmap;
jpe: TJPEGImage;
begin
ReqCode:='show';
NMUDP1.ReadStream(TmpStream);
RsltStream.CopyFrom(Tmpstream,NumberBytes);
if NumberBytes<BufSize then
begin
RsltStream.Position:=0;
if flag='form1' then
begin
jpe:=TJPEGImage.Create;
Bit:=TBitmap.Create;
try
jpe.LoadFromStream(RsltStream);
Bit.Assign(jpe);
//Image1.Picture.Bitmap.LoadFromStream(RsltStream);
Image1.Picture.Bitmap:=Bit;
finally
jpe.Free;
Bit.Free;
end;
end else
if flag='form2' then
begin
jpe:=TJPEGImage.create;
Bit:=TBitmap.Create;
try
jpe.LoadFromStream(RsltStream);
Bit.Assign(jpe);
StretchBlt(form2.Canvas.Handle,0,0,screen.Width,screen.Height,
Bit.Canvas.Handle,0,0,600,450,srccopy);
form2.Show;
finally
Bit.Free;
jpe.free;
end;
end;
TmpStream.Clear;
RsltStream.Clear;
end else
begin
TmpStream.Clear;
NMUDP1.RemoteHost:=edit1.Text;
NMUDP1.SendBuffer(ReqCode,4);
end;
end;

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧