[align=center][b][size=small][color=red]TCP远程控制[/color][/size][/b] 



[size=small][color=red]TCP协议:是可靠的,面向对象的,但是传输效率比较低 

[/color][/size] 

[size=small][color=red]使用Socket类 

会使用ServerSocket类 

[/color][/size] 

[size=small][color=red]TCP客户端:[/color][/size] 

 用来发送请求,再显示远程桌面面板,面板要有要连接IP地址,端口号。再给按钮添 


加监听器 


 MyListener mlis =new MyListener(); 

 btn.addActionListener(mlis); 


 //按钮监听器 

 class MyListener implements ActionListener{ 


 @Override 

 public void actionPerformed(ActionEvent e){ 

 //获得Ip@端口 

 String ip = ipField.getText(); 

 String port = portField.getText(); 


 int intPort = Integer.parseInt(port); 


 try{ 

 //创建客户端套接字,连接服务端 

 Socket socket =new Socket(ip,intPort); 

 //不停的接受服务端发来的图片 

 RecieveThread rt =new RecieveThread(socket,panel); 

 rt.start(); 

 }catch(Exception e1){ 

 //弹出错误提示框 

 JOptionPane.showMessageDialog(null,"网络异常,无法连接服务器!"); 

 e1.printStackTrace(); 

 } 

 } 

 } 

 } 

 // 从Socket上获得输入流 

 InputStream ips = socket.getInputStream(); 

 // 由于接受的是对象流 

 ObjectInputStream ois = new ObjectInputStream(ips); 

 while (true) { 

 // 读取对象,由于发送的是ImageIcon,这里可以强制转型成ImageIcon 

 Object obj = ois.readObject(); 

 ImageIcon icon = (ImageIcon) obj; 


 //获得图像大小(即为服务端桌面大小) 

 int width = icon.getIconWidth(); 

 int height = icon.getIconHeight(); 


 //修改panel大小为服务端桌面大小 

 panel.setPreferredSize(new Dimension(width,height)); 

 //获得画布 

 Graphics g = panel.getGraphics(); 

 g.drawImage(icon.getImage(), 0,0, null); 

[size=small][color=red] 

TCP服务端:[/color][/size] 


[size=small][color=red]接收客服端的请求[/color][/size]: 


 // 初始化服务端的方法 

 public void initServer() throws IOException { 

 // 创建服务端套接字对象 

 ServerSocket server = new ServerSocket(10010); 


 System.out.println("服务器已经启动,等待连接"); 


 // 等待客户端连接,如果有客户端连接上,会收到客户端套接字 

 Socket socket = server.accept(); 

 System.out.println("一个客户端连上了"+socket.getRemoteSocketAddress()); 

 // 启动一个线程来给客户端发送服务端桌面 

 SendThread st = new SendThread(socket); 

 st.start(); 


 //从套接字上获得输出流 

 OutputStream ops = socket.getOutputStream(); 

 //包装成对象流 

 ObjectOutputStream oos = new ObjectOutputStream(ops); 


 // 创建一个机器人对象,用来截屏 

 Robot robot = new Robot(); 


 while (true) { 

 // 获得屏幕的分辨率 

 Toolkit tool = Toolkit.getDefaultToolkit(); 

 Dimension dim = tool.getScreenSize(); 


 // 要截取的起始点 

 Point p = new Point(0, 0); 


 // 指定截取的区域 

 Rectangle rect = new Rectangle(p, dim); 


 // 开始截屏,获得截取到的图像 

 BufferedImage img = robot.createScreenCapture(rect); 


 //由于BufferedImage没有实现序列化,不能写到IO中 

 //将BufferedImage包装成可写入IO的图像对象 

 ImageIcon icon = new ImageIcon(img); 


 //写出对象 

 oos.writeObject(icon); 

 oos.flush(); 



[size=small][color=red][b]UDP的传输:[/b][/color][/size] 

 [b][size=small][color=red]UDP发送数据:[/color][/size][/b] 

 public static void main (String[] args)throws Exception { 

 //发件人的地址与发件人实例化 

 SocketAddress sendAdd = new InetSocketAddress("127.0.0.1",9091); 

 //收件人的地址 

 SocketAddress address = new InetSocketAddress("127.0.0.1",9090); 

 //用来发送数据包的套接字(快递员) 

 DatagramSocket socket = new DatagramSocket(sendAdd); 


 int num =0 ; 

 while(true){ 

 num++; 



 String ems="我是快递UDP"; 

 byte[] bnf= ems.getBytes();//吧字符串转换成字节类型 

 Thread.sleep(1000); 


 //创建一个要发送的数据包(包裹) 

 DatagramPacket packet =new DatagramPacket(bnf, bnf.length, address); 

 //发送数据包 

 socket.send(packet); 


 [b][size=small][color=red]UDP接收数据:[/color][/size][/b] 



//接受方的地址 

 SocketAddress receiveAdd= new InetSocketAddress ("127.0.0.1",9090); 

 //创建接收数据的套接字(快递员) 

 DatagramSocket socket = new DatagramSocket(receiveAdd); 


 int num =0; 

 while(true){ 

 num++; 

 Thread.sleep(1000); 

 byte [] buf = new byte[1024]; 

 //创建数据包对象 

 DatagramPacket packet =new DatagramPacket(buf ,buf.length); 


 //接收数据包,数据就会被存在buf数组中 

 socket.receive(packet); 

 String str = new String(buf); 

 System.out.println(str.trim());[/align] 

[b][size=small][color=red] 

总结:tcp协议和udp协议的区别 

 TCP UDP 

 是否连接 面向连接 面向非连接 

 传输可靠性 可靠 不可靠 

 应用场合 传输大量数据 少量数据 

 速度 慢 快[/color][/size][/b]