我没有用过你所说的那个软件,但是我认为这应该是一个远程控制问题,我开发过类似的软件,我采用了以下的设计方法:
首先,我假设对方为服务器,自己为客户端,首先我必须将他们连接起来,为了将他们连接服务器我会这么设计,放一个ServerSocket组件在服务器端,用于监听来自客户端的请求,再在服务器端放以下组件DriveComboBox,DirectoryListBox,FileListBox,分别用来获得服务器的驱动器列表,目录列表,文件列表:
客户端设计时,放以下组件: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
首先,我假设对方为服务器,自己为客户端,首先我必须将他们连接起来,为了将他们连接服务器我会这么设计,放一个ServerSocket组件在服务器端,用于监听来自客户端的请求,再在服务器端放以下组件DriveComboBox,DirectoryListBox,FileListBox,分别用来获得服务器的驱动器列表,目录列表,文件列表:
客户端设计时,放以下组件: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
解决方案 »
- 我的TrackBar怎么变成这样了,丑死了!!!!!!!
- 关于DELPHI注销的问题请教
- 如何打印单条记录和他的明细记录?
- 一个关于IT行业的问卷调查,做完后赠送视频捕获源代码一份
- 如何移动到指定记录?
- 公布一个秘籍,关于这方面有分的别忘记了让我拿哟。
- 一个很简单的问题,如何指定TChart的数据源(不从数据库取数)?
- 如何在DELPHI中使用SESSION变量?
- 急急急!,用ADO来实现对VF数据库的PACK操作
- 为什么报表不能显示?
- 请问,我用AdoQuery查询出来的结果放在DbEdit里,能不能修改?
- SQLServer2000数据库中的文件数据导入到库和数据导出到文件该怎样实现,最好写上实现代码,多给分
socket.SendText('dir!!'+DriveComboBox1.Items.Text );//返回驱动器列表
socket.Sendtext('dire!'+DirectoryListBox1.Items.Text);//返回目录列表
socket.SendText('file!'+FileListBox1.Items.Text);//返回客户端
客户端发送请求时也这么改一下
兄弟,小弟我就是遇上你说的这个问题,帮小弟去看下好吗?
http://www.csdn.net/expert/topic/694/694660.xml?temp=.8966486