你是指要采屏还是要获取对方的驱动器名字及文件目录呢

解决方案 »

  1.   

    放以下组件: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