用indy udp如何传输图片? 我想用indy udp控件来传输图片,如何做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Client端:(发方) private stream : TMemoryStream; //定义内存流,其实用 文件流也可以 size,count : integer; //文件大小 end;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);begin ClientSocket1.Address := Edit1.Text; ClientSocket1.Active := True;end;procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket);begin StatusBar1.SimpleText := 'Connected to '+Socket.RemoteAddress;end;procedure TForm1.Button2Click(Sender: TObject);begin stream := TMemoryStream.Create; if OpenDialog1.Execute then begin stream.LoadFromFile(OpenDialog1.FileName); size := stream.Size; //获得文件大小 count := 0; ClientSocket1.Socket.SendText(inttostr(size)); //先发送大小 end;end;procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);var rcvtxt : string; buf : array [1..2048] of char; left : integer;begin rcvtxt := Socket.ReceiveText; left := size - count; //未读字节数 if AnsiPos('go',rcvtxt)=1 then begin if sizeof(buf)<left then //若满一块则读一块 begin stream.Read(buf,sizeof(buf)); Socket.SendBuf(buf,sizeof(buf)); count := count + sizeof(buf); end else //不满则发剩余的 begin stream.Read(buf,left); Socket.SendBuf(buf,left); end; end;end;Server端(收方) private Tof : file; size,count :integer; end;var Form1: TForm1;implementation{$R *.DFM}procedure TForm1.CutFirst(denstr: string;scrstr: string);var len :integer;begin len := length(scrstr); denstr := copy(scrstr,2,(len-1));end;procedure TForm1.FormCreate(Sender: TObject);begin ServerSocket1.Active := True; StatusBar1.SimpleText := 'Listening...';end;procedure TForm1.ServerSocket1Accept(Sender: TObject; Socket: TCustomWinSocket);begin StatusBar1.SimpleText := 'Connected from '+ Socket.RemoteAddress;end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);var buf : array [1..2048] of char; rcvtxt : string; left,len : integer;begin len := Socket.ReceiveLength; if len<10 then //若长度小于10则认为是文件长度 begin rcvtxt := Socket.ReceiveText; size := strtoint(rcvtxt); count := 0; if SaveDialog1.Execute then begin AssignFile(ToF, SaveDialog1.FileName); Rewrite(ToF, 1); end; Socket.SendText('go'); end else begin left := size - count; //未写的字节数 if sizeof(buf)<left then //满一块则写一块 begin Socket.ReceiveBuf(buf,sizeof(buf)); BlockWrite(Tof,buf,sizeof(buf)); count := count + sizeof(buf); Socket.SendText('go'); end else //否则写剩余字节数 begin Socket.ReceiveBuf(buf,left); BlockWrite(Tof,buf,left); CloseFile(Tof); end; end;end; 关于delphi中cxgrid插入任意行的方法 在线等! 招delphi 系统分析员和高级程序员 怎么实现这样的功能??? 数据库编辑报错! REPORT BUILDER能不能继续前一次的打印继续打印,不换页的,如何做呀?多谢 关于TDateTimePicker的问题? 有关MDI窗口问题 哪位能给我:将bmp序列转为avi文件的原程序。我感谢100分。 各位程序员师傅,我是delphi新手,我希望按下一个button来实现静音,不知道用下面这段摘抄的代码能够实现么? 如何动态的弹出和已有窗体一样(包括窗体内部空件)。 如何动态建立一个form?
stream : TMemoryStream; //定义内存流,其实用
文件流也可以
size,count : integer; //文件大小
end;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Address := Edit1.Text;
ClientSocket1.Active := True;
end;procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText := 'Connected to '+Socket.RemoteAddress;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
stream := TMemoryStream.Create;
if OpenDialog1.Execute then
begin
stream.LoadFromFile(OpenDialog1.FileName);
size := stream.Size; //获得文件大小
count := 0;
ClientSocket1.Socket.SendText(inttostr(size)); //先发送大小
end;
end;procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
rcvtxt : string;
buf : array [1..2048] of char;
left : integer;
begin
rcvtxt := Socket.ReceiveText;
left := size - count; //未读字节数
if AnsiPos('go',rcvtxt)=1 then
begin
if sizeof(buf)<left then //若满一块则读一块
begin
stream.Read(buf,sizeof(buf));
Socket.SendBuf(buf,sizeof(buf));
count := count + sizeof(buf);
end
else //不满则发剩余的
begin
stream.Read(buf,left);
Socket.SendBuf(buf,left);
end;
end;
end;
Server端(收方)
private
Tof : file;
size,count :integer;
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.CutFirst(denstr: string;scrstr: string);
var
len :integer;
begin
len := length(scrstr);
denstr := copy(scrstr,2,(len-1));
end;procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Active := True;
StatusBar1.SimpleText := 'Listening...';
end;procedure TForm1.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText := 'Connected from '+ Socket.RemoteAddress;
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
buf : array [1..2048] of char;
rcvtxt : string;
left,len : integer;
begin
len := Socket.ReceiveLength;
if len<10 then //若长度小于10则认为是文件长度
begin
rcvtxt := Socket.ReceiveText;
size := strtoint(rcvtxt);
count := 0;
if SaveDialog1.Execute then
begin
AssignFile(ToF, SaveDialog1.FileName);
Rewrite(ToF, 1);
end;
Socket.SendText('go');
end
else
begin
left := size - count; //未写的字节数
if sizeof(buf)<left then //满一块则写一块
begin
Socket.ReceiveBuf(buf,sizeof(buf));
BlockWrite(Tof,buf,sizeof(buf));
count := count + sizeof(buf);
Socket.SendText('go');
end
else //否则写剩余字节数
begin
Socket.ReceiveBuf(buf,left);
BlockWrite(Tof,buf,left);
CloseFile(Tof);
end;
end;
end;