Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Клиент
- package hw13;
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.geom.Ellipse2D;
- import java.awt.geom.Rectangle2D;
- import java.io.*;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- class PictureFrame extends JFrame implements Serializable {
- private boolean a = false;
- public PictureFrame() {
- setSize(800, 600);
- setDefaultCloseOperation(EXIT_ON_CLOSE);
- JPanel picture2 = new JPanel();
- picture2.setLayout(new CardLayout());
- PaintComponent1 smile1 = new PaintComponent1();
- PaintComponent2 smile2 = new PaintComponent2();
- picture2.add(smile1);
- picture2.add(smile2);
- JPanel panelforbtn = new JPanel();
- panelforbtn.setLayout(new FlowLayout());
- JButton button = new JButton("Change channel");
- ((CardLayout) picture2.getLayout()).first(picture2);
- button.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- if (e.getSource() == button) {
- if (a) {
- ((CardLayout) picture2.getLayout()).first(picture2);
- a = false;
- } else {
- ((CardLayout) picture2.getLayout()).last(picture2);
- a = true;
- }
- }
- }
- });
- panelforbtn.add(button);
- getContentPane().add("Center", picture2);
- getContentPane().add("South", panelforbtn);
- }
- }
- class PaintComponent1 extends JComponent {
- public void paint(Graphics g) {
- Graphics2D g2 = (Graphics2D) g;
- //телевизор
- g2.setPaint(new Color(93, 95, 107));
- Rectangle2D k1 = new Rectangle2D.Double(200, 100, 400, 300);
- g2.fill(k1);
- g2.draw(k1);
- Rectangle2D k3 = new Rectangle2D.Double(380, 400, 40, 80);
- g2.fill(k3);
- g2.draw(k3);
- Rectangle2D k4 = new Rectangle2D.Double(300, 480, 200, 10);
- g2.fill(k4);
- g2.draw(k4);
- g2.setPaint(new Color(144, 215, 248));
- Rectangle2D k2 = new Rectangle2D.Double(220, 120, 360, 260);
- g2.fill(k2);
- g2.draw(k2);
- //смайлик
- g2.setPaint(new Color(255, 203, 0));
- Ellipse2D ellipse1 = new Ellipse2D.Double(330, 170, 150, 150);
- g2.fill(ellipse1);
- g2.draw(ellipse1);
- g2.setPaint(new Color(61, 56, 56));
- Ellipse2D ellipse2 = new Ellipse2D.Double(370, 210, 20, 20);
- g2.fill(ellipse2);
- g2.draw(ellipse2);
- Ellipse2D ellipse3 = new Ellipse2D.Double(420, 210, 20, 20);
- g2.fill(ellipse3);
- g2.draw(ellipse3);
- Rectangle2D k5 = new Rectangle2D.Double(370, 265, 70, 10);
- g2.fill(k5);
- g2.draw(k5);
- }
- }
- class PaintComponent2 extends JComponent {
- public void paint(Graphics g) {
- Graphics2D g2 = (Graphics2D) g;
- //телевизор
- g2.setPaint(new Color(93, 95, 107));
- Rectangle2D k1 = new Rectangle2D.Double(200, 100, 400, 300);
- g2.fill(k1);
- g2.draw(k1);
- Rectangle2D k3 = new Rectangle2D.Double(380, 400, 40, 80);
- g2.fill(k3);
- g2.draw(k3);
- Rectangle2D k4 = new Rectangle2D.Double(300, 480, 200, 10);
- g2.fill(k4);
- g2.draw(k4);
- g2.setPaint(new Color(103, 255, 109));
- Rectangle2D k2 = new Rectangle2D.Double(220, 120, 360, 260);
- g2.fill(k2);
- g2.draw(k2);
- //смайлик(удивленный)
- g2.setPaint(new Color(255, 203, 0));
- Ellipse2D ellipse1 = new Ellipse2D.Double(330, 170, 150, 150);
- g2.fill(ellipse1);
- g2.draw(ellipse1);
- g2.setPaint(new Color(61, 56, 56));
- Ellipse2D ellipse2 = new Ellipse2D.Double(370, 210, 20, 30);
- g2.fill(ellipse2);
- g2.draw(ellipse2);
- Ellipse2D ellipse3 = new Ellipse2D.Double(420, 210, 20, 30);
- g2.fill(ellipse3);
- g2.draw(ellipse3);
- Ellipse2D k5 = new Ellipse2D.Double(380, 265, 50, 35);
- g2.fill(k5);
- g2.draw(k5);
- }
- }
- public class Client {
- private static final String host = "localhost";
- private static final int port = 11111;
- private static DatagramPacket createPacket() {
- try {
- //Используем сериализацию, т.е. записываем данные объекта в поток
- ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("picture.dat"));
- PictureFrame pictureFrame = new PictureFrame();
- pictureFrame.setTitle("Client's picture");
- pictureFrame.setVisible(true);
- oos.writeObject(pictureFrame);
- //Считываем файл picture.dat в буфер, для DatagramPacket
- FileInputStream fin = new FileInputStream("picture.dat");
- byte[] buffer = new byte[fin.available()];
- fin.read(buffer, 0, fin.available());
- InetAddress IPAdress = InetAddress.getByName(host);
- return new DatagramPacket(buffer, buffer.length, IPAdress, port);
- } catch (Exception ex) {
- ex.getMessage();
- }
- return null;
- }
- public static void main(String[] args) throws Exception {
- try (DatagramSocket socket = new DatagramSocket()) {
- DatagramPacket packet = createPacket();
- socket.send(packet);
- }
- }
- }
- //Сервер
- package hw13;
- import java.io.*;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- public class Server {
- private static final int port = 11111;
- public static void decodePacket(DatagramPacket packet) throws IOException {
- try {
- FileOutputStream fos = new FileOutputStream("serverpicture.dat");
- fos.write(packet.getData());
- //чтение ранее сериализованных данных из потока
- FileInputStream fin = new FileInputStream("serverpicture.dat");
- ObjectInputStream ois = new ObjectInputStream(fin);
- PictureFrame pic = (PictureFrame) ois.readObject();
- pic.setTitle("Server's picture");
- pic.setVisible(true);
- } catch (Exception ex) {
- ex.getMessage();
- }
- }
- public static void main(String[] args) throws IOException {
- try (DatagramSocket socket = new DatagramSocket(port)) {
- byte[] buf = new byte[10000];
- DatagramPacket packet = new DatagramPacket(buf, buf.length);
- while (true) {
- socket.receive(packet);
- decodePacket(packet);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment