JAVA 원 격 녹화 화면 또는 방송 화면 구현

10622 단어
최근 에 인터넷 프로 그래 밍 수업 이 끝 날 때 선생님 께 서 큰 숙제 를 하 라 고 하 셨 습 니 다. 바로 JAVA 의 인터넷 지원 으로 하 나 를 쓰 는 것 입 니 다. 인터넷 채 팅 방, 두 지주 등 을 쓰 는 것 이 있 습 니 다. 저 는 녹화 화면 을 썼 습 니 다. 어제 검 수 를 통 과 했 습 니 다. 쓸데없는 말 은 하지 않 고 코드 를 직접 올 렸 습 니 다.
클 라 이언 트: 서버 에서 보 낸 정 보 를 받 습 니 다.
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package homework;
import java.awt.Frame; import java.awt.Image; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.*; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketAddress; import java.util.concurrent.TimeUnit; import java.util.zip.ZipInputStream; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; /* * @KnuthChao 20150625 * 서버 에서 보 낸 메 시 지 를 수신 하 는 데 사 용 됩 니 다. 다 중 스 레 드 와 마 우 스 를 기록 하지 않 았 고 나중에 시간 이 있 으 면 * 추가 합 니 다. */public class ReceiveImages extends Thread{ public BorderInit frame ; public Socket socket; public String IP;
public static void main(String[] args){
    new ReceiveImages(new BorderInit(),"127.0.0.1").start();
}
//    
public ReceiveImages(BorderInit frame,String IP)
{
    this.frame = frame;
    this.IP=IP;
}
 //  run  
public void run() {
    while(frame.getFlag()){
        try {
            socket = new Socket(IP,12122);
            DataInputStream ImgInput = new DataInputStream(socket.getInputStream());
            ZipInputStream imgZip = new ZipInputStream(ImgInput);

            imgZip.getNextEntry(); // Zip       
            Image img = ImageIO.read(imgZip);  //      Zip        
            frame.jlbImg.setIcon(new ImageIcon(img));
            System.out.println("   "+(System.currentTimeMillis()/1000)%24%60+" ");
            frame.validate();
            TimeUnit.MILLISECONDS.sleep(1);//         
            imgZip.close();


        } catch (IOException | InterruptedException e) {
            System.out.println("    ");
        }finally{
            try {
                socket.close();
            } catch (IOException e) {}  
        }       
    }   
}

}
//client 엔 드 창 보조 클래스, 교사 로부터 받 은 화면 정보 class BorderInit extends JFrame {private static final long serial Version UID = 1L; public JLabel jlbImg; private boolean flag;
public boolean getFlag(){
    return this.flag;
}
public BorderInit()
{

    this.flag=true;
    this.jlbImg = new JLabel();

    this.setTitle("    IP:"+"127.0.0.1");
    this.setSize(1366, 768);
    this.setAlwaysOnTop(true);  //          
    this.add(jlbImg);
    this.setLocationRelativeTo(null);
    this.setExtendedState(Frame.MAXIMIZED_BOTH);
    this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    this.setVisible(true);
    this.validate();

    //      
    this.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            flag=false;
            BorderInit.this.dispose();
            System.out.println("    ");
            System.gc();  
        }
    });
}

} 서버: 데이터 클래스 이름 보 내기: SendScreen/* * 이 라 이 센 스 헤 더 를 변경 하려 면 프로젝트 속성 에서 라 이 센 스 헤 더 를 선택 하 십시오. * 이 템 플 릿 파일 을 변경 하려 면 도구 | 템 플 릿 * 을 선택 하고 편집기 에서 템 플 릿 을 엽 니 다. */패키지 숙제;import javax.swing.DefaultListModel; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import java.net.*; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.JFrame; /** * * @author Knuth */ public class SendScreen extends javax.swing.JFrame {
  public static int SERVERPORT=12122;
private ServerSocket serverSocket;
private Robot robot;
public  Dimension screen;
public Rectangle rect ;
private Socket socket; 
DefaultListModel dlmsend = new DefaultListModel();

public SendScreen(int SERVERPORT) {
    initComponents();
    jList1.setModel(dlmsend);
    try {
        serverSocket = new ServerSocket(SERVERPORT);
        //      
        serverSocket.setSoTimeout(864000);
        robot = new Robot();
    } catch (Exception e) {
        e.printStackTrace();
    }

    screen = Toolkit.getDefaultToolkit().getScreenSize();  //        

    rect = new Rectangle(screen);                          //         

}                         
private void initComponents() {

    jScrollPane1 = new javax.swing.JScrollPane();
    jList1 = new javax.swing.JList();
    jButton1 = new javax.swing.JButton();
    jButton2 = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jScrollPane1.setViewportView(jList1);

    jButton1.setText("    ");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    jButton2.setText("    ");
    jButton2.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton2ActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(28, 28, 28)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 389, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(24, Short.MAX_VALUE))
                .addGroup(layout.createSequentialGroup()
                    .addComponent(jButton1)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jButton2)
                    .addGap(40, 40, 40))))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(24, 24, 24)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGap(62, 62, 62)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jButton1)
                .addComponent(jButton2))
            .addContainerGap(61, Short.MAX_VALUE))
    );

    pack();
}//                         

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    dlmsend.addElement("       !");

    Thread t = new  reThread();
        t.start();
}                                        

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    try {
          // TODO add your handling code here:
          socket.close();
          dlmsend.addElement("    ");
          Thread t = new  reThread();
        t.stop();
      } catch (IOException ex) {
          Logger.getLogger(SendScreen.class.getName()).log(Level.SEVERE, null, ex);
      }
}                                        



class reThread extends Thread {

    public void run(){

        while(true)
    {
        try{
            socket = serverSocket.accept();
            dlmsend.addElement("        ");
            ZipOutputStream zip = new ZipOutputStream(new DataOutputStream(socket.getOutputStream()));
            zip.setLevel(0);     //      ,java 8   11     ?



            BufferedImage img = robot.createScreenCapture(rect);
            zip.putNextEntry(new ZipEntry("test.jpg"));
            ImageIO.write(img,"jpg",zip);
            if(zip!=null)zip.close();
            dlmsend.addElement("Client      ");
             dlmsend.addElement("   "+(System.currentTimeMillis()/1000)%24%60+" ");
        } catch (IOException ioe) {
            dlmsend.addElement("    ");

        } finally {
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {e.printStackTrace();}
            }
        }
    }
    }
}

public static void main(String args[]) {

    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(SendScreen.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(SendScreen.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(SendScreen.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(SendScreen.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new SendScreen(SERVERPORT).setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JList jList1;
private javax.swing.JScrollPane jScrollPane1;
// End of variables declaration                   

}
처음으로 여기에 코드 를 추가 하 는 것 은 익숙 하지 않 습 니 다. 이상 은 이 기능 의 실현 입 니 다. NetBeans 가 그린 창 으로 창문 의 그림 은 더 이상 올 리 지 않 습 니 다. 그림 의 간단 도 를 누가 썼 는 지 누가 알 고 있 는 지, 바로 이 렇 습 니 다. 가 져 간 것 은 기억 하 세 요 (● '◡' ●).

좋은 웹페이지 즐겨찾기