我想在在delphi下实现文件传输,不想用ftp等,
想用indy中的idtcpclient与idtcpserver实现。
我的实际难题为怎么把一个字符串与一个文件打包一起传送给另一个端???
想用indy中的idtcpclient与idtcpserver实现。
我的实际难题为怎么把一个字符串与一个文件打包一起传送给另一个端???
解决方案 »
- 如何利用DELPHI无提示将EXCEL2.1另存或转换成高版本?EXCEL2003即可
- ADO连接db数据库出现‘操作必须使用一个可更新的查询’错误,请问怎么解决???
- 请教如何实现当一段时间内没有动键盘或鼠标,就弹出一个密码框锁定窗体的功能。
- 我在use中使用了comobj,在另外一台机器(没装delphi)上运行需要拷贝什么文件?
- 急呀,!TDBChart的简单问题,在线等待。解决立即发分。
- 在delphi中如何调用帮助文件?
- 怎样对ClientDataset中输入的重复记录进行判断?
- TNMUDP怎么得到当前再线的人员名单?
- 有关打印的问题,请教高手
- 对利用Telnet进行自动化处理提点意见
- 请教高手----在dephi中调用java程序(涉及对象共享)
- 我该用什么手段访问远程数据库?大家帮忙!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls; type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
btnTestSockets: TButton;
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure btnTestSocketsClick(Sender: TObject);
private
FStream: TFileStream;
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
iLen: Integer;
Bfr: Pointer;
begin
iLen := Socket.ReceiveLength;
GetMem(Bfr, iLen);
try
Socket.ReceiveBuf(Bfr^, iLen);
FStream.Write(Bfr^, iLen);
finally
FreeMem(Bfr);
end;
end; procedure TForm1.FormCreate(Sender: TObject);
begin
FStream := nil;
end; procedure TForm1.FormDestroy(Sender: TObject);
begin
if Assigned(FStream) then
begin
FStream.Free;
FStream := nil;
end;
end; procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
if Assigned(FStream) then
begin
FStream.Free;
FStream := nil;
end;
end; procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
FStream := TFileStream.Create('c:\temp\test.stream.html', fmCreate or fmShareDenyWrite);
end; procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendStream(TFileStream.Create('c:\temp\test.html', fmOpenRead or fmShareDenyWrite));
end; procedure TForm1.btnTestSocketsClick(Sender: TObject);
begin
ServerSocket1.Active := True;
ClientSocket1.Active := True;
end; end.
我刚入门不久,看了以上回复,还不能解决,请再多多赐教!
比方以下数据结构在:
type data=record
id:smallint;
mess:string[80];
filename:string[40];//里面存放的为要交换的文件名(包括路径)
end;
帮忙写一个打包发送与接收分解的过程。
我会尽快结贴!先谢为敬!!!
var
this_connect:connect;
stream:TMemoryStream;
fs:tfilestream;
begin
this_connect:=find_id(data_send.con_id);
if this_connect.thread_id>0 then
begin
{
type
data_record=record
con_code:smallint;//操作码
con_id:integer;//发送目的id号
mess_len:integer;//消息长度
file_size:int64;//文件长度
name_size:smallint;//文件名的长度
filename:string;//文件名
mess:string;//消息体,文本格式
end;
}
stream:=TMemoryStream.Create;
stream.WriteBuffer(data_send.con_code,sizeof(data_send.con_code));
stream.WriteBuffer(data_send.con_id,sizeof(data_send.con_id)); data_send.mess_len:=length(data_send.mess);
stream.WriteBuffer(data_send.mess_len,sizeof(data_send.mess_len));
stream.WriteBuffer(data_send.mess[1],data_send.mess_len); if fileexists(data_send.filename) then
begin
data_send.name_size:=length(data_send.filename);
fs:=tfilestream.Create(data_send.filename,fmopenread);
data_send.file_size:=fs.Size; stream.WriteBuffer(data_send.file_size,sizeof(data_send.file_size));//发送文件大小
stream.WriteBuffer(data_send.name_size,sizeof(data_send.name_size));//发送文件名大小
stream.WriteBuffer(data_send.filename[1],data_send.name_size);//发送文件名
stream.WriteBuffer(fs,data_send.file_size);//发送文件体
fs.Free;
end
else
begin
data_send.file_size:=0;
stream.WriteBuffer(data_send.file_size,sizeof(data_send.file_size));//发送文件大小0
end; this_connect.objects.Connection.WriteStream(stream,true,true);
stream.Free;
result:=true;
end
else
result:=false;
end;
stream.WriteBuffer(data_send, REC_SIZE);(注:一個数据结构record、一斉装入如何?)
文件不能一齐装入传送的!