java语言利用Socket实现对操作系统的命令调用和文件传输

java语言利用Socket实现对操作系统的命令调用和文件传输

1、我们需要什么?

       1)、执行系统命令

       (2)、执行远程拷贝文件

        (3)、执行远程发送文件

2、针对STAF的本身限制,需要找到一个简单、轻便的来替代

 

3C语言实现的Socket也会受到限制

本身的不同的操作系统对C语言库函数的支持不同,所以,应用C语言实现的Socket会受到跨平台的限制。

4java语言的优势,可以借鉴SUN公司给出的解释

-1、简单

-2、面向对象

-3、分布式

-4、解释性

-5、健壮

-6、安全

-7、系统无关

-8、可移植

-9、高性能

-10、多线程和动态的语言

5、实现流程图如下:

 

6、环境搭建

       1、服务端和客户端安装jdk

       2、服务端端口号信息放置于C(windows系统)/home/(linux系统)目录的port.ini文件中(端口号是4位数字,没有被占用)

       3、将已经打好jar包的两个文件分别放到服务端和客户端

7、执行

       双击放置到服务端和客户端的两个jar

       在命令行窗口输入java -jar  path/*.jar

8、图形如下:

传文件时显示如下:

 

9、实现的命令模型:

从客户端图形界面接收到的命令为:

TIME@OS_TYPE#IP#PORT#COMMAND#CONDITION

从客户端传给服务端命令为:

OS_TYPE#IP#PORT#COMMAND#CONDITION

 中间需要考虑传输井号时的特别情况,可加 { }  进行区分

10ZA-SOCKET有未来

-1、应用于自动化

-2、继续完善其余功能

       (1)实现命令行输入

       (2)读取文件,分析执行,完成日志功能

       (3)其余需求的编码

-3、广阔天地大有作为

 

 

  /**
   * 执行系统命令
   *
   * @param cmd
   * @return 返回值为0说明系统命令执行成功,其他值都是失败。
   */
  private int systemCMD(String cmd) {
   Runtime rt = Runtime.getRuntime();
   int value = 1;
   String[] excuteCMD = cmd.split("#");
   String os_type = excuteCMD[0];
   String four = excuteCMD[4];
   String[] count = four.split("
\\s");
   String needCMD = null;
   try {
    Process proc = null;
    if("windows".equals(os_type)){
     if (four.substring(four.length() - 4, four.length())
       .toUpperCase().equalsIgnoreCase(".BAT")) {
      if (count.length >= 2) {
       needCMD = "cmd.exe /c " + four;
      } else {
       needCMD = four;
      }
     } else {
      needCMD = "cmd.exe /c " + four;
     }
     proc = rt.exec(needCMD);
    }
    if("linux".equals(os_type)){
     String[] linuxCMD = {"/bin/sh","-c",four};
     proc = rt.exec(linuxCMD);
    }
   
    proc.waitFor();
    value = proc.exitValue();
   } catch (Exception e) {
    e.printStackTrace();
    serverJta.append("执行的命令不是系统命令!\n\n");
   }
   return value;
  }

             int value = this.systemCMD(msg);
        if (value == 0) {
         serverJta.append("执行系统命令成功!\n");
         pw.println("success");
         pw.flush();
        } else {
         serverJta.append("执行系统命令失败!\n");
         pw.println("fail");
         pw.flush();
        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值