Java实现的cmd远程控制程序

合集下载

java执行windows下cmd命令的方法

java执行windows下cmd命令的方法

java执⾏windows下cmd命令的⽅法本⽂实例讲述了java执⾏windows下cmd命令的⽅法。

分享给⼤家供⼤家参考。

具体实现代码如下:复制代码代码如下://获取运⾏时Runtime rt = Runtime.getRuntime();//获取进程Process p = rt.exec(String[] cmdarray);//或者 Process p = rt.exec(String cmd);//如果p不为空,那么要清空if(null!=p){destory p.destory(); p=null;}例如:复制代码代码如下:Runtime rt = Runtime.getRuntime();Process p = rt.exec("cmd.exe /c shutdown -a");System.out.println(p.toString());cmd /c dir 是执⾏完dir命令后关闭命令窗⼝。

cmd /k dir 是执⾏完dir命令后不关闭命令窗⼝。

cmd /c start dir 会打开⼀个新窗⼝后执⾏dir指令,原窗⼝会关闭。

cmd /k start dir 会打开⼀个新窗⼝后执⾏dir指令,原窗⼝不会关闭。

可以⽤cmd /?查看帮助信息。

补充:★CMD命令★1. gpedit.msc-----组策略2. sndrec32-------录⾳机3. Nslookup-------IP地址侦测器4. explorer-------打开资源管理器5. logoff---------注销命令6. tsshutdn-------60秒倒计时关机命令7. lusrmgr.msc----本机⽤户和组8. services.msc---本地服务设置9. oobe/msoobe /a----检查XP是否激活10. notepad--------打开记事本11. cleanmgr-------垃圾整理12. net start messenger----开始信使服务13. compmgmt.msc---计算机管理14. net stop messenger-----停⽌信使服务15. conf-----------启动netmeeting16. dvdplay--------DVD播放器17. charmap--------启动字符映射表18. diskmgmt.msc---磁盘管理实⽤程序19. calc-----------启动计算器20. dfrg.msc-------磁盘碎⽚整理程序21. chkdsk.exe-----Chkdsk磁盘检查22. devmgmt.msc--- 设备管理器23. regsvr32 /u *.dll----停⽌dll⽂件运⾏24. drwtsn32------ 系统医⽣25. rononce -p ----15秒关机26. dxdiag---------检查DirectX信息27. regedt32-------注册表编辑器28. Msconfig.exe---系统配置实⽤程序29. rsop.msc-------组策略结果集30. mem.exe--------显⽰内存使⽤情况31. regedit.exe----注册表32. winchat--------XP⾃带局域⽹聊天33. progman--------程序管理器34. winmsd---------系统信息35. perfmon.msc----计算机性能监测程序36. winver---------检查Windows版本37. sfc /scannow-----扫描错误并复原38. taskmgr-----任务管理器(2000/xp/200339. winver---------检查Windows版本40. wmimgmt.msc----打开windows管理体系结构(WMI)41. wupdmgr--------windows更新程序42. wscript--------windows脚本宿主设置43. write----------写字板44. winmsd---------系统信息45. wiaacmgr-------扫描仪和照相机向导46. winchat--------XP⾃带局域⽹聊天47. mem.exe--------显⽰内存使⽤情况48. Msconfig.exe---系统配置实⽤程序49. mplayer2-------简易widnows media player50. mspaint--------画图板51. mstsc----------远程桌⾯连接52. mplayer2-------媒体播放机53. magnify--------放⼤镜实⽤程序54. mmc------------打开控制台55. mobsync--------同步命令56. dxdiag---------检查DirectX信息57. drwtsn32------ 系统医⽣58. devmgmt.msc--- 设备管理器59. dfrg.msc-------磁盘碎⽚整理程序60. diskmgmt.msc---磁盘管理实⽤程序61. dcomcnfg-------打开系统组件服务62. ddeshare-------打开DDE共享设置63. dvdplay--------DVD播放器64. net stop messenger-----停⽌信使服务65. net start messenger----开始信使服务66. notepad--------打开记事本67. nslookup-------⽹络管理的⼯具向导68. ntbackup-------系统备份和还原69. narrator-------屏幕“讲述⼈”70. ntmsmgr.msc----移动存储管理器71. ntmsoprq.msc---移动存储管理员操作请求72. netstat -an----(TC)命令检查接⼝73. syncapp--------创建⼀个公⽂包74. sysedit--------系统配置编辑器75. sigverif-------⽂件签名验证程序76. sndrec32-------录⾳机77. shrpubw--------创建共享⽂件夹78. secpol.msc-----本地安全策略79. syskey---------系统加密,⼀旦加密就不能解开,保护windows xp系统的双重密码80. services.msc---本地服务设置81. Sndvol32-------⾳量控制程序82. sfc.exe--------系统⽂件检查器83. sfc /scannow---windows⽂件保护84. tsshutdn-------60秒倒计时关机命令85. tourstart------xp简介(安装完成后出现的漫游xp程序)86. taskmgr--------任务管理器87. eventvwr-------事件查看器88. eudcedit-------造字程序89. explorer-------打开资源管理器90. packager-------对象包装程序91. perfmon.msc----计算机性能监测程序92. progman--------程序管理器93. regedit.exe----注册表94. rsop.msc-------组策略结果集95. regedt32-------注册表编辑器96. rononce -p ----15秒关机97. regsvr32 /u *.dll----停⽌dll⽂件运⾏98. regsvr32 /u zipfldr.dll------取消ZIP⽀持99. cmd.exe--------CMD命令提⽰符100. chkdsk.exe-----Chkdsk磁盘检查101. certmgr.msc----证书管理实⽤程序102. calc-----------启动计算器103. charmap--------启动字符映射表104. cliconfg-------SQL SERVER 客户端⽹络实⽤程序105. Clipbrd--------剪贴板查看器106. conf-----------启动netmeeting107. compmgmt.msc---计算机管理108. cleanmgr-------垃圾整理109. ciadv.msc------索引服务程序110. osk------------打开屏幕键盘111. odbcad32-------ODBC数据源管理器112. oobe/msoobe /a----检查XP是否激活113. lusrmgr.msc----本机⽤户和组114. logoff---------注销命令115. iexpress-------⽊马捆绑⼯具,系统⾃带116. Nslookup-------IP地址侦测器117. fsmgmt.msc-----共享⽂件夹管理器118. utilman--------辅助⼯具管理器119. gpedit.msc-----组策略120. explorer-------打开资源管理器javac 其实执⾏了只是没有输出执⾏结果因为你没有输出执⾏结果的部分如果你执⾏复制代码代码如下:Runtime.getRuntime.exec("cmd");也看不到结果因为它不是在java程序中执⾏的⽽是在操作系统上执⾏的你可以这样复制代码代码如下:Runtime.getRuntime.exec("cmd /c start javac ");就可以看到⼀个命令⾏窗。

如何使用CMD命令行工具进行远程桌面管理

如何使用CMD命令行工具进行远程桌面管理

如何使用CMD命令行工具进行远程桌面管理远程桌面管理是一种方便的方式,可以帮助用户通过网络远程访问和控制其他计算机。

虽然有许多图形界面工具可供选择,但CMD命令行工具也提供了一种简单而有效的方法。

在本文中,我们将探讨如何使用CMD命令行工具进行远程桌面管理。

首先,我们需要确保目标计算机已启用远程桌面功能。

在目标计算机上,打开“控制面板”,然后选择“系统和安全”选项。

在“系统”下,点击“远程设置”。

在弹出的窗口中,确保选中了“允许远程连接到此计算机”选项。

根据需要,您还可以选择其他选项,如“允许仅运行最新的远程桌面客户端连接”或“允许网络级别身份验证”。

完成后,点击“确定”保存设置。

接下来,我们需要知道目标计算机的IP地址。

打开CMD命令行工具,输入“ipconfig”命令,然后按下回车键。

在输出中,找到“IPv4地址”一节,其中列出了计算机的IP地址。

请记下这个地址,我们将在后面的步骤中使用。

现在,我们可以使用CMD命令行工具建立远程桌面连接。

在本地计算机上,打开CMD命令行工具,并输入“mstsc”命令,然后按下回车键。

这将打开远程桌面连接工具。

在远程桌面连接工具中,输入目标计算机的IP地址,并点击“连接”按钮。

如果一切正常,您将看到一个弹出窗口,要求您输入目标计算机的凭据。

输入正确的用户名和密码,然后点击“确定”按钮。

一旦连接成功,您将能够在本地计算机上看到目标计算机的桌面。

您可以像操作本地计算机一样操作远程计算机,打开应用程序,查看文件,甚至进行文件传输。

当您完成远程操作后,只需关闭远程桌面连接窗口即可断开连接。

除了基本的远程桌面连接,CMD命令行工具还提供了其他一些有用的功能。

例如,您可以使用“/v”参数指定目标计算机的IP地址,而不需要打开远程桌面连接工具。

例如,输入“mstsc /v:192.168.1.100”将直接连接到IP地址为192.168.1.100的计算机。

此外,您还可以使用CMD命令行工具执行一些高级操作,如启用或禁用远程桌面功能,创建或删除远程桌面会话等。

Windows系统中Java调用cmd命令及执行exe程序的方法

Windows系统中Java调用cmd命令及执行exe程序的方法

Windows系统中Java调⽤cmd命令及执⾏exe程序的⽅法Java调⽤cmd命令,并输出显⽰信息:package com.anxin.cmd.test;import java.io.BufferedReader;import java.io.InputStreamReader;public class Command {public static void main(String[] args) {try {Runtime rt = Runtime.getRuntime();Process pr = rt.exec("cmd /c dir"); // cmd /c calc// Process pr = rt.exec("D:\ unlei\\project.aspx");BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream(), "GBK"));String line = null;while ((line = input.readLine()) != null) {System.out.println(line);}int exitVal = pr.waitFor();System.out.println("Exited with error code " + exitVal);} catch (Exception e) {System.out.println(e.toString());e.printStackTrace();}}}Java启动本机应⽤程序EXE的三种⽅式:第⼀种⽅式:利⽤cmd⽅式/*** 执⾏cmd命令** @param command* @throws IOException*/public static String executeCmd(String command) throws IOException {("Execute command : " + command);Runtime runtime = Runtime.getRuntime();Process process = runtime.exec("cmd /c " + command);BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"));String line = null;StringBuilder build = new StringBuilder();while ((line = br.readLine()) != null) {(line);build.append(line);}return build.toString();}executeCmd(start "AXAdWebBrowser" "D:\AXAdsBrowser\AXAdWebBrowser.exe");第⼆种⽅式:利⽤ProcessBuilder调⽤cmd⽅式/*** 启动应⽤程序** @param programName* @return* @throws IOException*/public static void startProgram(String programPath) throws IOException {("启动应⽤程序:" + programPath);if (StringUtils.isNotBlank(programPath)) {try {String programName = programPath.substring(stIndexOf("/") + 1, stIndexOf(".")); List<String> list = new ArrayList<String>();list.add("cmd.exe");list.add("/c");list.add("start");list.add("\"" + programName + "\"");list.add("\"" + programPath + "\"");ProcessBuilder pBuilder = new ProcessBuilder(list);pBuilder.start();} catch (Exception e) {e.printStackTrace();log.error("应⽤程序:" + programPath + "不存在!");}}}第三种⽅式:使⽤Desktop启动应⽤程序/*** 启动应⽤程序** @param programName* @return* @throws IOException*/public static void startProgram(String programPath) throws IOException {("启动应⽤程序:" + programPath);if (StringUtils.isNotBlank(programPath)) {try {Desktop.getDesktop().open(new File(programPath));} catch (Exception e) {e.printStackTrace();log.error("应⽤程序:" + programPath + "不存在!");}}}。

使用Windows CMD命令进行远程控制的方法

使用Windows CMD命令进行远程控制的方法

使用Windows CMD命令进行远程控制的方法随着科技的发展,远程控制已经成为了现代生活中不可或缺的一部分。

无论是远程维护、远程教育还是远程办公,远程控制都能够为我们带来极大的便利。

在Windows操作系统中,CMD命令是一种常用的工具,它可以帮助我们实现远程控制。

本文将介绍使用Windows CMD命令进行远程控制的方法。

首先,我们需要确保在远程控制的过程中能够与目标设备建立连接。

为了实现这一点,我们可以使用CMD命令中的“ping”命令来测试网络连接。

在CMD窗口中输入“ping 目标IP地址”(例如:ping 192.168.0.1),然后按下回车键即可开始测试。

如果返回的结果显示“请求超时”或“无法访问目标主机”,那么说明目标设备与本机之间的连接存在问题,我们需要检查网络设置或者确保目标设备处于开机状态。

一旦我们确认与目标设备建立了连接,我们就可以开始使用CMD命令进行远程控制了。

CMD命令中的“telnet”命令可以帮助我们远程登录到目标设备。

在CMD窗口中输入“telnet 目标IP地址”(例如:telnet 192.168.0.1),然后按下回车键。

如果目标设备开启了telnet服务,并且我们输入的IP地址是正确的,那么我们将会被要求输入用户名和密码。

输入正确的用户名和密码后,我们就成功地远程登录到了目标设备。

一旦我们成功登录到目标设备,我们就可以使用CMD命令进行各种操作了。

例如,我们可以使用“ipconfig”命令查看目标设备的IP配置信息,使用“netstat”命令查看网络连接状态,使用“tasklist”命令查看正在运行的进程等等。

通过这些CMD命令,我们可以对目标设备进行详细的监控和管理。

除了telnet命令外,CMD命令中还有其他一些可以帮助我们实现远程控制的命令。

例如,我们可以使用“shutdown”命令来远程关闭目标设备,使用“regedit”命令来远程编辑目标设备的注册表,使用“schtasks”命令来远程管理目标设备的计划任务等等。

java打开本地应用程序(调用cmd)---Runtime用法详解

java打开本地应用程序(调用cmd)---Runtime用法详解

java打开本地应⽤程序(调⽤cmd)---Runtime⽤法详解 有时候我们需要借助java程序打开电脑⾃带的⼀些程序,可以直接打开或者借助cmd命令窗⼝打开⼀些常⽤的应⽤程序或者脚本,在cmd窗⼝执⾏的命令都可以通过这种⽅式运⾏。

例如:package cn.xm.exam.test;import java.io.IOException;import org.junit.Test;public class TestCmd {@Testpublic void test1() throws IOException {// 直接打开应⽤程序Runtime.getRuntime().exec("C:/Users/liqiang/Desktop/开机后点它.bat"); // 打开⼀个批处理⽂件Runtime.getRuntime().exec("E:/酷狗/KGMusic/KuGou.exe"); // 打开酷狗/******** 可以通过cmd命令打开软件或者是做其他 *****/Runtime.getRuntime().exec("C:/Windows/System32/cmd.exe /k start E:/酷狗/KGMusic/KuGou.exe"); // 通过cmd窗⼝执⾏命令Runtime.getRuntime().exec("C:/Windows/System32/cmd.exe /k start E:/php/Test/第⼀个html/界⾯.html"); // 通过cmd命令打开⼀个⽹页Runtime.getRuntime().exec("C:/Windows/System32/cmd.exe /k mkdir C:\\Users\\liqiang\\Desktop\\java键的1"); // 通过cmd创建⽬录⽤两个反斜杠Runtime.getRuntime().exec("C:/Windows/System32/cmd.exe /k mkdir C:\\Users\\liqiang\\Desktop\\java键的2"); // 通过cmd创建⽬录⽤两个反斜杠Runtime.getRuntime().exec("C:/Windows/System32/cmd.exe /c calc ");// 通过cmd打开计算器}@Testpublic void test2() throws IOException {/******** 可以通过cmd命令打开软件或者是做其他 *****/Runtime.getRuntime().exec("C:/Windows/System32/cmd.exe /c osk");// 通过屏幕软键盘}}另外也可以获取⼀些其他的JVM参数:long totalMemory = Runtime.getRuntime().totalMemory();//总内存long freeMemory = Runtime.getRuntime().freeMemory();//剩余内存long maxMemory = Runtime.getRuntime().maxMemory();//最⼤内存System.out.println(totalMemory/1024/1024+"MB");System.out.println(freeMemory/1024/1024+"MB");System.out.println(maxMemory/1024/1024+"MB");也可以直接执⾏⼀些命令:Runtime.getRuntime().exec("calc");//打开计算器补充:上⾯的⽅式都是异步运⾏的⽅式,也就是在执⾏命令之后会不等exec执⾏完就执⾏下⼀条语句,为了实现同步结果,或者为了获取返回的结果,参考:import java.io.IOException;import java.io.InputStream;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public final class Test {private static final Logger logger = LoggerFactory.getLogger(Test.class);public static void main(String[] args) throws NullPointerException {long start = System.currentTimeMillis();String srcPath = "C:/Users/liqiang/Desktop/ww/tt.docx", desPath = "C:/Users/liqiang/Desktop/ww";String command = "";String osName = System.getProperty("");if (osName.contains("Windows")) {command = "soffice --headless --convert-to pdf " + srcPath + " --outdir " + desPath;exec(command);}long end = System.currentTimeMillis();logger.debug("⽤时:{} ms", end - start);}public static boolean exec(String command) {Process process;// Process可以控制该⼦进程的执⾏或获取该⼦进程的信息try {logger.debug("exec cmd : {}", command);process = Runtime.getRuntime().exec(command);// exec()⽅法指⽰Java虚拟机创建⼀个⼦进程执⾏指定的可执⾏程序,并返回与该⼦进程对应的Process对象实例。

在MacOS上使用Java编写简单的控制台应用程序

在MacOS上使用Java编写简单的控制台应用程序

在MacOS上使用Java编写简单的控制台应用程序在MacOS系统上,使用Java编写简单的控制台应用程序是一项常见的任务。

Java作为一种跨平台的编程语言,可以在不同操作系统上运行,包括MacOS。

本文将介绍如何在MacOS系统上使用Java编写简单的控制台应用程序,帮助初学者快速入门。

准备工作在开始编写Java控制台应用程序之前,首先需要确保在MacOS 系统上已经安装了Java开发工具包(JDK)。

可以通过在终端中输入java -version命令来检查是否已经安装了JDK。

如果未安装,可以前往Oracle官网下载并安装最新版本的JDK。

编写第一个Java应用程序接下来,我们将编写一个简单的Java控制台应用程序。

首先,在任意目录下创建一个新的文件夹,例如HelloWorld,然后在该文件夹下创建一个名为HelloWorld.java的Java源代码文件。

示例代码star:编程语言:javapublic class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");}}示例代码end以上代码是一个最简单的Java应用程序,其中定义了一个名为HelloWorld的类,该类包含一个名为main的方法,在该方法中使用System.out.println()方法输出”Hello, World!“到控制台。

编译和运行Java应用程序在MacOS系统上,可以使用终端来编译和运行Java应用程序。

首先打开终端,并切换到存放HelloWorld.java文件的目录下,然后执行以下命令来编译该Java文件:示例代码star:编程语言:bashjavac HelloWorld.java示例代码end如果编译成功,会生成一个名为HelloWorld.class的字节码文件。

如何通过Windows CMD命令进行远程操作与管理

如何通过Windows CMD命令进行远程操作与管理

如何通过Windows CMD命令进行远程操作与管理在现代信息技术的发展下,远程操作与管理已经成为了许多企业和个人的必备技能。

而在Windows操作系统中,CMD命令是一种强大的工具,可以帮助我们实现远程操作与管理的目标。

本文将介绍如何通过Windows CMD命令进行远程操作与管理。

一、远程登录远程登录是远程操作与管理的第一步。

在Windows中,我们可以使用CMD命令来实现远程登录。

首先,我们需要知道目标主机的IP地址或主机名。

然后,在CMD命令行中输入以下命令:```mstsc /v:目标主机IP地址或主机名```这个命令将打开远程桌面连接工具,并自动填写目标主机的IP地址或主机名。

接下来,我们只需要输入用户名和密码,就可以远程登录到目标主机了。

二、远程文件传输远程文件传输是远程操作与管理的另一个重要方面。

在Windows中,我们可以使用CMD命令来实现远程文件传输。

首先,我们需要知道目标主机的IP地址或主机名。

然后,在CMD命令行中输入以下命令:```copy 源文件路径目标主机IP地址或主机名的共享文件夹路径这个命令将把源文件复制到目标主机的共享文件夹中。

需要注意的是,目标主机的共享文件夹必须设置为可写权限。

三、远程进程管理远程进程管理是远程操作与管理的另一个重要方面。

在Windows中,我们可以使用CMD命令来实现远程进程管理。

首先,我们需要知道目标主机的IP地址或主机名。

然后,在CMD命令行中输入以下命令:```tasklist /s 目标主机IP地址或主机名 /u 用户名 /p 密码```这个命令将列出目标主机上的所有进程。

如果我们想结束某个进程,可以使用以下命令:```taskkill /s 目标主机IP地址或主机名 /u 用户名 /p 密码 /pid 进程ID```这个命令将结束指定进程ID的进程。

四、远程服务管理远程服务管理是远程操作与管理的另一个重要方面。

在Windows中,我们可以使用CMD命令来实现远程服务管理。

如何使用CMD命令行进行远程控制和管理

如何使用CMD命令行进行远程控制和管理

如何使用CMD命令行进行远程控制和管理在计算机网络中,远程控制和管理是一项重要的技能。

通过CMD命令行,我们可以远程控制和管理其他计算机,无论它们是在同一局域网内还是在不同的地理位置上。

本文将介绍如何使用CMD命令行进行远程控制和管理。

1. 远程控制远程控制是指通过CMD命令行远程操作其他计算机。

首先,我们需要确保目标计算机已经开启了远程控制功能。

在目标计算机上,打开“系统属性”窗口,选择“远程”选项卡,勾选“允许远程协助连接到此计算机”和“允许远程桌面连接到此计算机”选项。

然后,我们可以使用CMD命令行来远程控制目标计算机。

在本地计算机上,打开CMD命令行窗口,输入以下命令:```mstsc /v:目标计算机IP地址```其中,目标计算机IP地址是指要远程控制的计算机的IP地址。

按下回车键后,会弹出一个远程桌面连接窗口,输入目标计算机的用户名和密码,即可远程控制目标计算机。

2. 远程管理除了远程控制,我们还可以使用CMD命令行进行远程管理。

远程管理是指通过CMD命令行管理其他计算机的系统和服务。

下面列举了一些常用的远程管理命令:- 远程关机:使用以下命令可以远程关闭其他计算机:```shutdown /m \\目标计算机IP地址 /s /f```其中,/m参数指定目标计算机的IP地址,/s参数表示关闭计算机,/f参数表示强制关闭。

- 远程重启:使用以下命令可以远程重启其他计算机:```shutdown /m \\目标计算机IP地址 /r /f```其中,/m参数指定目标计算机的IP地址,/r参数表示重启计算机,/f参数表示强制重启。

- 远程查询系统信息:使用以下命令可以远程查询其他计算机的系统信息:```systeminfo /s 目标计算机IP地址```其中,/s参数指定目标计算机的IP地址。

- 远程管理服务:使用以下命令可以远程管理其他计算机的服务:```sc \\目标计算机IP地址 start/stop 服务名```其中,\\目标计算机IP地址指定目标计算机的IP地址,start/stop参数表示启动/停止服务,服务名指定要管理的服务名称。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java不能调用Win_Api,所以直接用Win_Api就行不通了。

但是我们可以借助DLL 来实现。

以下就是cmdDLL的实现过程:首先,用在cmd命令提示符下执行javac Server.java (接下来它将调用cmdDLL.dll的函数 CMD)生成一个Server.class文件,接下来就是用这个Server.class文件生成Server.h文件(执行javah Server.h)。

其次,先写一个.cpp文件,在这个.cpp程序中我们将先前已经弄好的Server.h 要包含在这个cmdDLL.cpp文件中,因为Server.h文件是接下来Server.java中要调用的CMD者个函数的声明。

cmdDLL.cpp文件如下://begin#include "Server.h"#include <stdlib.h>#include <string.h>JNIEXPORT void JNICALL Java_Server_CMD (JNIEnv * env, jclass,jstring a ){const char* str = env->GetStringUTFChars(a,0);char str_1[100] = {0};strncpy(str_1,str,strlen(str)-1);char str_2[100] = " > out.txt";strcat(str_1,str_2);system(str_1);}//end执行以下命令(需要vc环境):cl/c cmdDLL.cpplink cmdDLL.obj /dll以生成一个cmdDLL.Dll文件。

cmdDLL.Dll中的void CMD(String args)这个函数的功能:(1)接受上层的一个string args 然后将其类型转换后得到一个const char* str。

const char* str = env->GetStringUTFChars(a,0);(2)由于我们需要向Client回显cmd中的内容所以这里我们就需要将回显先转移到out.txt中char str_1[100] = {0};strncpy(str_1,str,strlen(str)-1);char str_2[100] = " > out.txt";strcat(str_1,str_2);然后将数据以文本的形式存到out.txt(准备给Client回显)中。

最后就是要实现str_1这个指令了(在cmd之下),我所使用的方法是int system(const char* args)。

比如现在位置是D:\,然后str_1 = “dir > out.txt”,那么其将在Server端显示cmdDLL的DLL文件。

二:实现了Java在Server端使用cmd命令的功能,接下来要实现的就是TCP 链接了。

首先,比如Client端向Server端发送一条命令比如说dir ,那么在客户端会显示现在Server.class所在的文件夹。

图二显示其它文件夹则必须加上其绝对路径如dir E:E-book。

图三还可以是执行别的指令如shutdown,type……等待。

bug:欲对Server上的Java文件和C文件进行编译或链接必须将其放在Server.class所在的本文件夹。

程序代码://=================================================================== ===================//************服务端代码****************************************************************//=================================================================== ===================Server:/** 文件名:Server.java* 环境:Eclipse 3.2 + VS 2005* 功能:远程控制程序Client端(受控端)* 作者:lwm1986* 日期:2007.5.17* E-mail : Lauvenman@* QQ:271096597*/import java.io.*;import .*;class Server{static{System.loadLibrary("cmdDLL");//加载DLL。

}public native static void CMD(String b);public static void main(String argv[]) throws Exception{String ClientSentence;//接收Client传来的命令Server callDll = new Server();ServerSocket welcomeSocket = new ServerSocket(2000);//在Port:1033端口处等Clientwhile (true){Socket conncetionSocket = welcomeSocket.accept(); //等.......BufferedReader inFromClient = new BufferedReader(newInputStreamReader(conncetionSocket.getInputStream()));DataOutputStream outToClient = new DataOutputStream(conncetionSocket.getOutputStream());ClientSentence = inFromClient.readLine();//收到Client的命令callDll.CMD(ClientSentence + ' ');//调用dll中的函数执行命令/*打开文件统计Server回显信息的字节数*/String filename = "out.txt";FileInputStream fis = newFileInputStream(filename);int i = 0;while ((fis.read()) != -1){i++;}fis.close();if (i != 0) //当文件长不为0时{outToClient.writeBytes("YES_TEXT" + ' ');//向Client的flag发送接收信号/*将字节流读到byte[] B中*/FileInputStream fis_1 = new FileInputStream(filename);BufferedInputStream buff = newBufferedInputStream(fis_1);byte[] B = new byte[i];while ((buff.read(B, 0, i)) != -1){}String S = new String(B);//将byte[] B 中的信息复制到String S中String[] s_1 = S.split(" ");//将String B的信息按' '剪切后放到String[] s_1中/*向Client端发送回显信息*/Integer Int = s_1.length;outToClient.writeBytes(Int.toString() + ' ');for(int j = 0; j < s_1.length; j++){byte[] s_2 = (s_1[j] + " ").getBytes();outToClient.write(s_2);}} else//如果此命令无回显信息则向Client端flag发送信息告诉Client没有回显信息outToClient.writeBytes("NO_TEXT" + ' ');}}}//=================================================================== ===================//************客户端代码****************************************************************//=================================================================== ===================Client:/** 文件名:Client.java* 环境:Eclipse 3.2 + VS 2005* 功能:远程控制程序Client端(控制端)* 作者:lwm1986* 日期:2007.5.17* E-mail : Lauvenman@* QQ:271096597*/import java.io.*;import .*;class Client {public static void main(String argv[]) throws Exception {while (true) {Socket ClientSocket = new Socket("127.0.0.1", 2000);//确定Server的IP和Port,这里我是用了自己机子的IPString sentence;//向Server发送的命令BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));DataOutputStream OutToServer = newDataOutputStream(ClientSocket.getOutputStream());BufferedReader inFromServer = new BufferedReader(newInputStreamReader(ClientSocket.getInputStream()));System.out.print(">");sentence = inFromUser.readLine();//输入命令OutToServer.writeBytes(sentence + ' ');//发送命令String flag = "YES_TEXT";//建立一个flag用于判断是否会接收到Server发回的回显信息if (flag.equals(inFromServer.readLine())) {int cmdLineNum =Integer.parseInt(inFromServer.readLine());//确定Server发回信息的行数for (int i = 0; i < cmdLineNum; i++) {byte[] fromCMD =inFromServer.readLine().getBytes();//以字节数组的方式接收Server发回的信息String stringFromCMD = new String(fromCMD); //将信息转换为StringSystem.out.println(stringFromCMD);//在Client端输出信息}} else;ClientSocket.close();}}}。

相关文档
最新文档