目的:通过socket与socketserver的通信实现远程监控
首先,在serversocket(被监控端)一直截屏发送到socket。
再到socket(客户端)中不断接收截屏内容并展示出来。
代码如下:
服务器:
public class RemoteServer { private static Socket st; public static void main(String[] args) { ServerSocket server; try { server = new ServerSocket(1234); st = server.accept(); System.out.println("已连接"); // 新开两个线程,一个发送截屏,一个接收鼠标键盘并进行模拟操作 new SendThread(st).start(); } catch (IOException e) { e.printStackTrace(); } } } class SendThread extends Thread { Robot robot; ObjectOutputStream os; BufferedOutputStream bos; ImageOutputStream ios; Rectangle rect; private boolean isAlive = true; Socket st; public SendThread(Socket st) { this.st = st; try { robot = new Robot(); Point p = new Point(0, 0); // 获得屏幕大小 Toolkit tool = Toolkit.getDefaultToolkit(); Dimension dis = tool.getScreenSize(); rect = new Rectangle(p, dis); } catch (Exception e) { e.printStackTrace(); } } public void run() { try { os = new ObjectOutputStream(st.getOutputStream()); BufferedImage img = null; while (isAlive) { // 根据矩形rect大小进行截屏,得到BUfferedImage对象 img = robot.createScreenCapture(rect); // BUfferedImage没有序列化,先包装成ImageIcon再写出去 ImageIcon icon = new ImageIcon(img); os.writeObject(icon); os.flush(); Thread.sleep(1000); } } catch (Exception e) { e.printStackTrace(); } } }
客户端:
重写重绘的方法。
public class RemoteClient extends JFrame { private JPanel contentPane; Socket socket; ObjectInputStream ins; boolean isAlive = true; private ImageIcon icon; public static void main(String[] args) { Socket socket = null; try { socket = new Socket("127.0.0.1", 1234); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } new RemoteClient(socket); } /** * Create the frame. */ public RemoteClient(Socket socket) { this.socket = socket; try { ins = new ObjectInputStream(socket.getInputStream()); } catch (IOException e) { e.printStackTrace(); } setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(0, 0, 1200, 700); contentPane = new MyPanel(); JScrollPane jsp = new JScrollPane(contentPane); jsp.setAutoscrolls(true); add(jsp); setVisible(true); new Receive().start(); } /** * 接收服务器的图片 * * @author Huangbin * @date 2014年7月31日 */ class Receive extends Thread { public void run() { try { while (isAlive) { System.out.println("开始读"); icon = (ImageIcon) ins.readObject(); System.out.println(icon); System.out.println("读完了"); // 根据图片大小定义contentPane大小。 contentPane.setSize(icon.getIconWidth(), icon.getIconHeight()); contentPane.repaint(); Thread.sleep(1000); } } catch (Exception e1) { e1.printStackTrace(); } } } class MyPanel extends JPanel { public void paint(Graphics g) { super.paint(g); g.drawImage(icon.getImage(), 0, 0, contentPane); } } }
相关推荐
Socket与ServerSocket编程实践聊天,服务器和客户端频繁通信
socket与serversocket交互信息
Socket+ServerSocket代码
本资源是java中socket与serverSocket连接的例子,包括客户端和服务器端的程序代码
只是简单的一个socket/serversocket编程例子
Java实现基于TCP的Socket&ServerSocket通讯
Socket/ServerSocket构架的多个客户端在线聊天系统 1.多线程 2.对象传送 3.客户端管理 4.线程同步
Android网络调试软件源码,采用TCP协议通信,APP中选择客户端socket或者服务器ServerSocket后,进行两者通信,实现聊天功能,代码易拓展,可以拓展成app与wifi设备、单片机通信;app与电脑端网络调试软件通信
Android完全支持JDK本身的TCP,UDP网络通信API,也可以使用ServerSocket,Socket来建立基于TCP/IP协议的网络通信,也可以使用DatagramSocket,Datagrampacket来建 立基于UDP协议的网络通信
基于TCP的网络编程,使用Socket和ServerSocket实现多人聊天的聊天室程序,Java网络编程章节训练的小程序
聊天室(用java代码编写,用到Socket,serverSocket,FileInputStream.....) 可以实现公聊与私聊!字体调色,大小....(界面手工编写) 虽然功能简单但也是可以借鉴的,
delphi socket(ClientSocket,ServerSocket)简单实例
socket和serversocket利用IO流编写的多线程连接相互发送消息
serversocket web服务器
用java 代码写的客户端/服务器聊天系统serverSocket and socket
下面小编就为大家带来一篇JAVA-NIO之Socket/ServerSocket Channel(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Socket和ServerSocket类库位于java.net包中。Server Socket用于服务器端,Server Socket通信是建立网络连接时使用的。在 连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个...
只要配合这我的博客中的代码演示~平常忘了的话可以下载下来看看~反正也不要积分~下载也不会怀孕~哈
delphi 异步socket(ClientSocket,ServerSocket)实例,在XE2和XE7 上测试通过,其它没有测试。
多个示例代码资源,解释代码。对于刚入门学serversocket的人来说,更容易接受