unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, StdCtrls;type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
myreadfile,mywritefile:tfilestream;
serversend,cliendaccept:boolean;
implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
serversocket1.Active:=true;
clientsocket1.Active:=true;
myreadfile:=tfilestream.Create('d:\aaa.txt',fmOpenRead);
serversend:=false;
cliendaccept:=false;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Socket.Sendtext('givemefile');
end;procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var i:integer;
begin
mywritefile:=tfilestream.Create('d:\basd.txt',fmcreate);
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
if not serversend then
begin
if (socket.ReceiveLength<>10) or (socket.ReceiveText<>'givemefile') then
exit
else begin
serversend:=true;
socket.SendStream(myreadfile);
serversend:=false;
end;
end;
end;end.
窗体中有一个按钮和serversocket1 clientsocket1
这里只是简单的实现了.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, StdCtrls;type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
myreadfile,mywritefile:tfilestream;
serversend,cliendaccept:boolean;
implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
serversocket1.Active:=true;
clientsocket1.Active:=true;
myreadfile:=tfilestream.Create('d:\aaa.txt',fmOpenRead);
serversend:=false;
cliendaccept:=false;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Socket.Sendtext('givemefile');
end;procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var i:integer;
begin
mywritefile:=tfilestream.Create('d:\basd.txt',fmcreate);
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
if not serversend then
begin
if (socket.ReceiveLength<>10) or (socket.ReceiveText<>'givemefile') then
exit
else begin
serversend:=true;
socket.SendStream(myreadfile);
serversend:=false;
end;
end;
end;end.
窗体中有一个按钮和serversocket1 clientsocket1
这里只是简单的实现了.
serversocket一次传一部分,clientsocket收到文件后追加,
然后发读下一部分的请求,serversocket再发下一部分.
我需要的是要两个程序Server端在A机,Client端在B机,而且传送的文件不是*.txt,是任何文件。要Server端用ServerSocket,Client端用ClientSocket.之间的文件传送。
有点像下载东西一样了。
myreadfile:=tfilestream.Create('d:\aaa.exe',fmOpenRead);这样就打开exe 文件了.你可以试试看.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, StdCtrls;type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
myreadfile,mywritefile:tfilestream;
implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
serversocket1.Active:=true;
clientsocket1.Active:=true;
myreadfile:=tfilestream.Create('d:\aaa.exe',fmOpenRead);end;procedure TForm1.Button1Click(Sender: TObject);
begin
mywritefile:=tfilestream.Create('d:\basd.abc',fmcreate);
clientsocket1.Socket.Sendtext('givemefile');
end;procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var buffer:array[1..1000] of byte; len:integer;
begin
len:=socket.ReceiveLength;
if len>500 then
begin
mywritefile.Free;
showmessage('file send over!');
exit;
end;
socket.ReceiveBuf(buffer,len);
mywritefile.Write(buffer,len);
socket.SendText('continue');
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var buffer:array[1..1000] of byte; len:integer;
begin
if socket.ReceiveText<>'givemefile' then
begin
len:=myreadfile.Read(buffer,500);
if len=0 then
begin
socket.SendBuf(buffer,501);
end;
socket.SendBuf(buffer,len);
end
else begin
len:=myreadfile.Read(buffer,500);
socket.SendBuf(buffer,len);
end;
end;end.
刚才的程序有问题,下面的程序我测试过了,没有问题.