放以下组件:ClientSocket,ListBox,ClientSocket用来向服务器发出请求(它的port属性应该和服务器端的ServerSocket属性相同,否则不能正确连接),执行相应的动作,listbox用来接受反馈过来的数据, 下面我给出源代码,当然是核心部分:客户端: 再你的form上加一个button它的click事件中加入如下代码: clientsocket1.Address:=combobox1.Text ;//这是对方的ip clientsocket1.Port:=strtoint(edit1.Text );//监听的端口和服务器相同 clientsocket1.Active:=true;procedure TForm1.BitBtn1Click(Sender: TObject); begin clientsocket1.Socket.SendText('dirve');//获取驱动器列表 end;procedure TForm1.BitBtn2Click(Sender: TObject); begin clientsocket1.Socket.sendtext('direc'+edit4.Text);//目录列表edit4.text中的内容就是你要察看的目录如'c:\',则返回服务器c:\下所有目录 end;procedure TForm1.BitBtn3Click(Sender: TObject); begin clientsocket1.Socket.sendtext('files'+edit4.text);//文件列表edit4.txt中的内容为你要察看目录下的文件,如c:\temp,则返回服务器c:\temp下所有文件 end;服务器端: procedure TForm1.FormCreate(Sender: TObject); serversocket1.Open; serversocket1.Active:=true; serversocket1.Socket.Lock; end;procedure TForm1.serversocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);//接受客户端发来的请求serversocket的read事件 var data,workfile:string; begin data:=socket.ReceiveText ;//接受来自客户端的请求 workfile:=copy(data,6,length(data)-5); if pos('dirve',data)=1 then // 要求取得驱动器列表 begin socket.SendText('dirve'+DriveComboBox1.Items.Text );//返回驱动器列表 end; if pos('direc',data)=1 then begin drivecombobox1.Text :=workfile;//取得你所要求目录 socket.Sendtext('direc'+DirectoryListBox1.Items.Text);//返回目录列表 end;if pos('files',data)=1 then begin DirectoryListBox1.Directory:=strfile;//取得你所需要的文件列表 socket.SendText('files'+FileListBox1.Items.Text);//返回客户端 end; end;然后客户端受到消息之后作相应的处理procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var serback,workfile :string; u : integer; begin serback:=socket.ReceiveText ;//接受来自服务的消息 workfile:=copy(strback,6,length(strback)-5);if pos('dirve',serback)=1 then begin listbox1.Items.Text:=workfile;//获得服务器的驱动器的列表 // 盘图标 listview1.Items.Clear ; with listview1 do begin for u:=0 to listbox1.Items.Count-1 do begin ListItem := Items.Add; ListItem.Caption:=listbox1.Items.Strings[u]; //listitem.ImageIndex:=4; end; end; // listbox1.Items.Add('<<<<<<目标主机的驱动器>>>>>>>') ; end;if pos('direc',serback)=1 then begin listbox1.Items.Text:=workfile; listview1.Items.Clear ; with listview1 do begin for u:=0 to listbox1.Items.Count-1 do begin ListItem := Items.Add; ListItem.Caption:=listbox1.Items.Strings[u]; //listitem.ImageIndex:=3; //listview1.PopupMenu:=PopupMenu2; end; end; listbox1.Items.Add('目标主机的目录') ; end; if pos('files',strback)=1 then begin listbox1.Items.text:=strfile; listbox1.Items.Add('*************目标主机的文件****************') ; listview1.Items.Clear ; with listview1 do begin for u:=0 to listbox1.Items.Count-1 do begin ListItem := Items.Add; ListItem.Caption:=listbox1.Items.Strings[u]; // listitem.ImageIndex:=1; end; end; 如此只要你再edit4中输入你所想察看的东西时对方计算机内容全部在listbox中被显示出来 如果你想程序和对方服务器一接通就能获得对方电脑的内容在ClientSocket的onConnect事件中加入 procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin socket.SendText('dirve'+DriveComboBox1.Items.Text );//返回驱动器列表,你可以写成其他的 如:socket.SendText('dirve'+DriveComboBox1.Items.Text+'?'+DirectoryListBox1.Items.Text ); 这样你在接受时以特殊字符'?'为分界线作相应的处理就能获得不同的内容. end; 那么对方的电脑的驱动器列表就在连接上的那一刻被返回. 如果你想实时监控对方的电脑,再在服务器端加一个timer,将它的interval属性设为3000(当然你可以任意)这样 procedure TForm1.Timer1Timer(Sender: TObject); begin ServerSocket1.socket.Sendtext('direc'+DirectoryListBox1.Items.Text);//返回目录列表,你可以改为其他的 end; 这样你就可以随时监视对方的变化,当然首先对方必须启动服务器程序,你必须知道对方的ip
下面我给出源代码,当然是核心部分:客户端:
再你的form上加一个button它的click事件中加入如下代码:
clientsocket1.Address:=combobox1.Text ;//这是对方的ip
clientsocket1.Port:=strtoint(edit1.Text );//监听的端口和服务器相同
clientsocket1.Active:=true;procedure TForm1.BitBtn1Click(Sender: TObject);
begin
clientsocket1.Socket.SendText('dirve');//获取驱动器列表
end;procedure TForm1.BitBtn2Click(Sender: TObject);
begin
clientsocket1.Socket.sendtext('direc'+edit4.Text);//目录列表edit4.text中的内容就是你要察看的目录如'c:\',则返回服务器c:\下所有目录
end;procedure TForm1.BitBtn3Click(Sender: TObject);
begin
clientsocket1.Socket.sendtext('files'+edit4.text);//文件列表edit4.txt中的内容为你要察看目录下的文件,如c:\temp,则返回服务器c:\temp下所有文件
end;服务器端:
procedure TForm1.FormCreate(Sender: TObject);
serversocket1.Open;
serversocket1.Active:=true;
serversocket1.Socket.Lock;
end;procedure TForm1.serversocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);//接受客户端发来的请求serversocket的read事件
var
data,workfile:string;
begin
data:=socket.ReceiveText ;//接受来自客户端的请求
workfile:=copy(data,6,length(data)-5); if pos('dirve',data)=1 then // 要求取得驱动器列表
begin
socket.SendText('dirve'+DriveComboBox1.Items.Text );//返回驱动器列表
end; if pos('direc',data)=1 then
begin
drivecombobox1.Text :=workfile;//取得你所要求目录
socket.Sendtext('direc'+DirectoryListBox1.Items.Text);//返回目录列表
end;if pos('files',data)=1 then
begin
DirectoryListBox1.Directory:=strfile;//取得你所需要的文件列表
socket.SendText('files'+FileListBox1.Items.Text);//返回客户端
end;
end;然后客户端受到消息之后作相应的处理procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
serback,workfile :string;
u : integer;
begin
serback:=socket.ReceiveText ;//接受来自服务的消息
workfile:=copy(strback,6,length(strback)-5);if pos('dirve',serback)=1 then
begin
listbox1.Items.Text:=workfile;//获得服务器的驱动器的列表
// 盘图标
listview1.Items.Clear ;
with listview1 do
begin
for u:=0 to listbox1.Items.Count-1 do
begin
ListItem := Items.Add;
ListItem.Caption:=listbox1.Items.Strings[u];
//listitem.ImageIndex:=4;
end;
end;
//
listbox1.Items.Add('<<<<<<目标主机的驱动器>>>>>>>') ;
end;if pos('direc',serback)=1 then
begin
listbox1.Items.Text:=workfile;
listview1.Items.Clear ;
with listview1 do
begin
for u:=0 to listbox1.Items.Count-1 do
begin
ListItem := Items.Add;
ListItem.Caption:=listbox1.Items.Strings[u];
//listitem.ImageIndex:=3;
//listview1.PopupMenu:=PopupMenu2;
end;
end;
listbox1.Items.Add('目标主机的目录') ;
end;
if pos('files',strback)=1 then
begin
listbox1.Items.text:=strfile;
listbox1.Items.Add('*************目标主机的文件****************') ;
listview1.Items.Clear ;
with listview1 do
begin
for u:=0 to listbox1.Items.Count-1 do
begin
ListItem := Items.Add;
ListItem.Caption:=listbox1.Items.Strings[u];
// listitem.ImageIndex:=1;
end;
end;
如此只要你再edit4中输入你所想察看的东西时对方计算机内容全部在listbox中被显示出来
如果你想程序和对方服务器一接通就能获得对方电脑的内容在ClientSocket的onConnect事件中加入
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
socket.SendText('dirve'+DriveComboBox1.Items.Text );//返回驱动器列表,你可以写成其他的
如:socket.SendText('dirve'+DriveComboBox1.Items.Text+'?'+DirectoryListBox1.Items.Text );
这样你在接受时以特殊字符'?'为分界线作相应的处理就能获得不同的内容.
end;
那么对方的电脑的驱动器列表就在连接上的那一刻被返回.
如果你想实时监控对方的电脑,再在服务器端加一个timer,将它的interval属性设为3000(当然你可以任意)这样
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ServerSocket1.socket.Sendtext('direc'+DirectoryListBox1.Items.Text);//返回目录列表,你可以改为其他的
end;
这样你就可以随时监视对方的变化,当然首先对方必须启动服务器程序,你必须知道对方的ip