1.发送端的代码

这里广播的地址只写了一个

 package com.udp.broadcast;

 import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.zip.GZIPInputStream; import javax.imageio.ImageIO; import java.awt.AWTException;
import java.awt.Rectangle; public class ScreenBroadcastDemo { public static void main(String[] args) throws Exception {
DatagramSocket sendSocket = new DatagramSocket(8888);
Rectangle screenRect = null;
BufferedImage bufImage = null;
ByteArrayOutputStream baos = null;
int i = 0;
while(true){
screenRect = new Rectangle(0, 0, 300, 400);
bufImage = new Robot().createScreenCapture(screenRect);
baos = new ByteArrayOutputStream();
ImageIO.write(bufImage, "jpg", baos);
byte[] byteData = baos.toByteArray();
DatagramPacket dataPack = new DatagramPacket(byteData, byteData.length);
InetAddress iaddr = InetAddress.getByName("localhost");
dataPack.setAddress(iaddr);
dataPack.setPort(8889);
sendSocket.send(dataPack);
i++;
System.out.println("广播次数" + i);
} } }

2. 接收端的代码

2.1 startClient

 package com.udp.receiver;

 public class SartClient {

     public static void main(String[] args) {
ClientUI clientUI = new ClientUI();
new ClientReceiverThread(clientUI).start();
} }

2.2ClientUI

 package com.udp.receiver;

 import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea; import com.sun.javafx.sg.prism.web.NGWebView;
import com.sun.org.apache.bcel.internal.generic.IndexedInstruction; public class ClientUI extends JFrame {
private JLabel label;
private ImageIcon imageIcon;
public ClientUI(){
InitUI(); }
/*
*窗口初始化
*/
public void InitUI(){
this.setLayout(null);
this.setVisible(true);
this.setBounds(0, 0, 500, 600);
label = new JLabel();
label.setBounds(0, 0, 300, 400);
this.add(label); //窗口关闭时,程序退出。两种方法都可以
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e ) {
System.exit(-1);
}
});
}
public void refreshUI(ImageIcon icon){
label.setIcon(icon);
this.add(label);
} }

2.3ClientReceiverThread

 package com.udp.receiver;

 import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException; import javax.imageio.ImageIO;
import javax.print.attribute.standard.PrinterMessageFromOperator;
import javax.swing.ImageIcon; public class ClientReceiverThread extends Thread {
private ClientUI ui;
public ClientReceiverThread(ClientUI ui){
this.ui = ui;
}
public void run(){
byte[] buf = new byte[1024 * 60];
DatagramSocket recvSocket = null;
byte[] byteRecvData = null;
ByteArrayInputStream bais = null;
BufferedImage bufImageRecv = null;
ImageIcon ImageIcon = null;
DatagramPacket dataPack = new DatagramPacket(buf, buf.length);
try {
recvSocket = new DatagramSocket(8889);
while(true){
recvSocket.receive(dataPack);
byteRecvData = dataPack.getData();
bais = new ByteArrayInputStream(byteRecvData);
bufImageRecv = ImageIO.read(bais);
ImageIcon = new ImageIcon(bufImageRecv, "Screen");
ui.refreshUI(ImageIcon);
Thread.sleep(10);
}
} catch (Exception e) {
e.printStackTrace();
} } }

java--UDP屏幕广播代码的更多相关文章

  1. java通过控制鼠标实现屏幕广播

    在java实现屏幕共享的小程序中提到截取屏幕时是没鼠标,为了看到教师端界面上的鼠标,可以在截取屏幕的时候,把鼠标绘制到每一张截图上去,但是由于截图的时候是一张张截取的,所以看到的鼠标难免会有点卡,之前 ...

  2. java udp 广播

    原文链接: http://blog.csdn.net/yudajun/article/details/8477149 udp 是一种网络通信协议,不需要客户端和服务器端建立连接即可进行通讯功能.相对于 ...

  3. Android 广播代码的发送与接收

    Android四大组件之一广播,使用的也比较多,广播可大致分为两种,一种是Android系统区域的广播,是由系统指令发出,例如:点亮屏幕广播,开机过程中的一些广播 省略-, 然而还有一种广播就是我们自 ...

  4. Python实现局域网内屏幕广播的技术要点分析(转载)

    转载:https://mp.weixin.qq.com/s?timestamp=1498531736&src=3&ver=1&signature=Eq6DPvkuGJi*G5s ...

  5. Java UDP网络编程 - 最简单示例

    UDP也是网络通讯中的一个重要协议,与TCP区别可参见浅谈TCP/IP 和 UDP的区别,本文就对Java UDP通讯做一个简单例子介绍 服务端: package wyf; import java.i ...

  6. java udp (使用类调用双通信)1

    项目需要就使用了UDP通信,做了java的双方通信,其实代码还是来自之前的udp学习代码,自己加了注释,并且优化的使用类来封装关于通信类库的使用代码 目的是为了在安卓项目中使用时,可以通过实例化,调用 ...

  7. uiautomatorviewer 优化定位符生成,支持生成Java,Python自动化代码

    项目介绍 二次开发 uiautomatorviewer 优化定位符生成,支持生成Java,Python自动化代码,修复自带工具画面有动态加载时截图失败问题,优化自带工具截图速度 ,实现类似录制脚本功能 ...

  8. java实现屏幕截屏功能

    最近在项目中遇到这样一个需求,用户生成推广海报想要发送给朋友,但是推广海报是用html网页写的,这时候想要分享给朋友的话只能用户自己手机截图,显然这样的用户体验是不友好的,如果可以给用户一个按钮实现一 ...

  9. (转载)JAVA动态编译--字节代码的操纵

    在一般的Java应用开发过程中,开发人员使用Java的方式比较简单.打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java 程序就可以了.这种开发模式背后的过程是:开发人员编写的 ...

随机推荐

  1. 在 Typescript 2.0 中使用 @types 类型定义

    在 Typescript 2.0 中使用 @type 类型定义 基于 Typescript 开发的时候,很麻烦的一个问题就是类型定义.导致在编译的时候,经常会看到一连串的找不到类型的提示.解决的方式经 ...

  2. window.returnValue跨域传值问题[转]

    主页面用window.showModalDialog的时候,如果直接打开其它系统的页面,这时候别人的页面在window.returnValue=1;这样返回值的时候,主页面是取不到返回值的,原因就是因 ...

  3. texy

    网络组件 WebView注册代码 <uses-permission android:name ="android.permission.INTERNET" /> 解释网 ...

  4. gdb 调试程序

    要调试生成的可执行程序,必须在生成的时候加入-g选项,生成可以调试的代码 例如:gcc -o test a.c b.c -g 这样gcc就会在链接的时候加入一些用于调试的符号 在生成可以调试的可执行程 ...

  5. java学习第20天(IO流)

    构造方法File file = new File("e:\\demo"); 创建文件夹 File file = new File("e:\\demo"); fi ...

  6. C# DataGridView显示行号的三种方法

    方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号: private void dgGrid_RowPostPaint( obj ...

  7. Unity IOC简单认知

    看了不少IOC的文章.简单概念梳理下. 1.依赖,依赖倒置,控制反转(IOC),依赖注入 解释是仿照http://www.cnblogs.com/qqlin/archive/2012/10/09/27 ...

  8. ubuntu安装mysql-python出错,EnvironmentError: mysql_config not found

    安装mysql-python包出错 Downloading MySQL-python-.zip (108kB) % |████████████████████████████████| 112kB 1 ...

  9. iBatis的SQL注入

    sqlMap中尽量不要使用$;$使用的是Statement(拼接字符串),会出现注入问题.#使用的是PreparedStatement(类似于预编译),将转义交给了数据库,不会出现注入问题:.前者容易 ...

  10. EM算法(4):EM算法证明

    目录 EM算法(1):K-means 算法 EM算法(2):GMM训练算法 EM算法(3):EM算法运用 EM算法(4):EM算法证明 EM算法(4):EM算法证明 1. 概述 上一篇博客我们已经讲过 ...