摘要:本文介绍了Socket 通信机 制,采用C/S 模式,使用Java 语 言SocketAPI(套接字接口)以及 多线程技术实现多客户端远程监 控服务器的功能,实现了上传、 下载、截图、远程关机、远程输 入dos 命令等功能。 【关键词】Java 远程监控 Socket 通信 1 引言 Java 语言具有跨平台性,是一门丰富的面 向对象的程序设计语言,同时具有强大的网络 编程接口,这使得Java 在网络通信方面游刃 有余,网络上的计算机如果进行通信,一方面 要准确定位计算机在网络中的位置,另一方面 则是要进行数据的传输。而这些功能的实现则 要依靠Java 强大的网络编程接口,如Socket 类、 ServerSocket 类等。 2 Socket通信 在数据传输过程中按照传输的协议我们 分为TCP 和UDP 两种,其中TCP 是面向连 接的传输控制协议,传输信息过程中确保数 据的有序性、可靠性,为流式Socket 通信。 UDP 是用户数据报协议,不保证数据的可靠 性,为数据报式Socket 通信。 在java 中为实现TCP,Socket 提供了 两个基础的类(Socket 和ServerSocket), Socket 类有两个作用:1、作为客户端向服务 器发出请求。2、在服务器端生成一个与客 户端对等的通信实体,实现一对一的通信。 ServerSocket 主要用于在TCP 传输的服务器端 建立一个监听端口,监听本地服务器是否接受 到客户机端的连接请求(当接收到请求的时候, 采用accept 方法确认连接,并在本地返回一个 Socket 对象,利用该Socket 对象与客户端的 Socket 实现建立通信)。 3 软件设计开发 在实际应用中,往往是在服务器上运行一 个永久的程序,它可以接收来自其他多个客户 端的请求,提供相应的服务。为了实现在服务 器方给多个客户提供服务的功能,需要利用多 线程实现多客户机制。用一个实现了runnable 的severworker 类来实现多线程。服务器总是 在指定的端口上监听是否有客户请求,一旦监 听到客户请求,服务器就会启动一个专门的服 务线程来响应该客户的请求,而服务器本身在 启动完线程之后马上又进入监听状态,等待下 一个客户的到来。 4 程序实现 4.1 服务器端程序编写 ServerSocket server=null; Socket theSocket=null; s e r v e r = n ew S e r v e r S o c k e t ( PORT _ NUMBER);// 监听端口 ServerWorker worker; Thread thread; while(true){ // 循环监听客户端的请求 theSocket=server.accept(); worker=new ServerWorker(theSocket);// 将 请求交给worker 线程处理 thread=new Thread(worker); thread.start();}// 运行worker 里面相应的 操作 线程类的实现: public void run () String message; try{ FileWriter client=new FileWriter("client. txt",true); theReader=new DataInputStream(theSocket. getInputStream()); // 获得客户端输入的相关信息 theWriter=new DataOutputStream(theSocket. getOutputStream()); // 获得服务器端的输出信息 String inputStr,outputStr; theWriter.writeUTF(" 欢迎进入网络远程监 控系统"); theWriter.flush();// 清空缓冲区,保证客户 端接收到相关信息 do{ inputStr=theReader.readUTF(); System.out.println(inputStr); if (inputStr.equals("bye")) break; String[] Array=inputStr.split("#"); client=new FileWriter(Array[0]+".txt",true); // 建立相关文件,将客户端执行的操作写入相 关日志文件中 if(Array[1].equals("upload")){}// 你想进行 的上传操作}}} 4.2 客户端的程序实现 String str=JOptionPane.showInputDialog("1. 输入你想连接到服务器端的IP 地址"); String sr=JOptionPane.showInputDialog(" 输入你想连接到服务器端的端口号"); try{ theSocket=new Socket(str,a);// 将服务器ip 地址和端口号传进 theReader=new DataInputStream(theSocket. getInputStream()); theWriter=new DataOutputStream(theSocket. getOutputStream()); }catch(Exception e){System.out.println("can not access to port "+sr); } 5 程序运行结果 主程序显示界面:通过选择相应的数字 来实现不同的功能 6 注意事项 应注意到:1. 当传一个较大的文件时, 需要分段传,因为tcp 包最大为64kb,往往我 们需要传的是一个很大的文件。还有注意输入 输出流的正确关闭,以及套接字socket 的正常 关闭。2. 总是先启动服务器程序,在启动客户 端程序,因本测试服务器和客户端为一台机器, 所以ip 地址选择为127.0.0.1。 参考文献 [ 1 ] a u t h o r . ( 美) K e n n e t h L . C a l v e r t M i c h a e l J . D o n a h o o . J a v a T C P / I P Socket 编程. 作者单位 中南大学计算机科学与技术湖南省长沙市 410000 |