`
l4432848
  • 浏览: 252743 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

局域网聊天【带照片】

    博客分类:
  • java
 
阅读更多
package com.kaige123;/**
 * 消息页面
 * @author 凯哥
 *
 */public class MessageFrame extends JFrame {    //把消息分成两部分
    private JSpinner spinner = new JSpinner();    //发送文本框
    public JTextArea textArea = new JTextArea();    //网络名称
    private String uname="";    //消息呈现
    public JEditorPane editorPane = new JEditorPane();    public JPanel panel_2 = new JPanel();    public JButton button_2 = new JButton();    public JButton button_3 = new JButton(); 
    public JButton button = new JButton();    public JPanel panel_1 = new JPanel();    public JPanel panel = new JPanel();    public JSplitPane splitPane = new JSplitPane();    public JScrollPane scrollPane = new JScrollPane();    public FlowLayout flowLayout = new FlowLayout();    public JScrollPane scrollPane_1 = new JScrollPane();    public JLabel label = new JLabel();    public FlowLayout flowLayout_1 = new FlowLayout();    //程序入口
    public static void main(String args[]) { 
                    MessageFrame frame = new MessageFrame();
                    frame.setVisible(true);
    }    public MessageFrame() {        super();
        uname=javax.swing.JOptionPane.showInputDialog(this,"请输入你的昵称:");        new UDPServer(this).start();
        setTitle("凯哥学堂-小案例-局域网聊天软件");
        setBounds(100, 100, 468, 412);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        splitPane.setDividerLocation(260);
        splitPane.setDividerSize(1);
        splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
        getContentPane().add(splitPane, BorderLayout.CENTER);   
        splitPane.setLeftComponent(scrollPane); 
        scrollPane.setViewportView(editorPane); 
        panel.setLayout(new BorderLayout());
        splitPane.setRightComponent(panel);  
        flowLayout.setAlignment(FlowLayout.LEFT);
        panel_1.setLayout(flowLayout);
        panel.add(panel_1, BorderLayout.NORTH); 
        button.setText("图片");
        panel_1.add(button); 
        label.setText("字体大小:"); 
        spinner.setPreferredSize(new Dimension(40, 20));
        spinner.setValue(12);
        panel_1.add(spinner); 
        flowLayout_1.setAlignment(FlowLayout.RIGHT);
        panel_2.setLayout(flowLayout_1);
        panel.add(panel_2, BorderLayout.SOUTH); 
        button_2.setText("震屏");
        panel_2.add(button_2); 
        button_3.setText("发送");
        panel_2.add(button_3); 
        panel.add(scrollPane_1, BorderLayout.CENTER); 
        scrollPane_1.setViewportView(textArea);
        button_3.addActionListener(new ActionListener() {            public void actionPerformed(final ActionEvent e) { 
                try {
                    String ip=InetAddress.getLocalHost().getHostAddress(); 
                    ip=ip.substring(0, ip.lastIndexOf("."));                    byte[] b = (uname+"\t宋体\t"+spinner.getValue()+"\t"+textArea.getText()).getBytes();
                    DatagramPacket data = new DatagramPacket(b, b.length,
                            InetAddress.getByName(ip+".255"), 8978);
                    DatagramSocket client = new DatagramSocket();
                    client.send(data);
                    textArea.setText("");
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
        });
        button_2.addActionListener(new ActionListener() {            public void actionPerformed(final ActionEvent e) {                try {
                    String ip=InetAddress.getLocalHost().getHostAddress(); 
                    ip=ip.substring(0, ip.lastIndexOf("."));                    byte[] b = (uname+"\t宋体\t"+spinner.getValue()+"\tZPZL22234").getBytes();
                    DatagramPacket data = new DatagramPacket(b, b.length,
                            InetAddress.getByName(ip+".255"), 8978);
                    DatagramSocket client = new DatagramSocket();
                    client.send(data);
                    textArea.setText("");
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
        });
        button.addActionListener(new ActionListener() {            public void actionPerformed(final ActionEvent e) {                new SelectImageFrame(MessageFrame.this).setVisible(true);
            }
        });
    }
}
package com.kaige123;/**
 * 照片选择
 * @author 凯哥
 *
 */public class SelectImageFrame extends JFrame {    class MyMouseListener extends MouseAdapter {
        String code = "";        public MyMouseListener(String code) {            this.code = code;
        }        public void mousePressed(MouseEvent e) {
             frame.textArea.setText(frame.textArea.getText()+code);
             SelectImageFrame.this.setVisible(false);
        }
    }    private static MessageFrame frame; 

    public SelectImageFrame(MessageFrame frame1) {        super();        this.frame = frame1;
        getContentPane().setLayout(new GridLayout(5, 0));
        setBounds(100, 100, 500, 500);
        setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
        for (int i = 0; i < 18; i++) {            if (i >= 10) {
                JLabel j1 = new JLabel(new ImageIcon("./image/1" + (i - 10)
                        + ".jpg"));
                j1.addMouseListener(new MyMouseListener("[1" + (i - 10) + "]"));                this.add(j1);
            } else {
                JLabel j1 = new JLabel(new ImageIcon("./image/0" + i + ".jpg"));
                j1.addMouseListener(new MyMouseListener("[0" + (i) + "]"));                this.add(j1);
            } 
        } 
    } 
}
package com.kaige123;/**
 * 局域网数据处理
 * @author 凯哥
 *
 */public class UDPServer extends Thread {    private MessageFrame frame = null;    public UDPServer(MessageFrame frame) {        this.frame = frame;
    }    // 处理对方发送过来的数据
    public void run() {        try {
            DatagramSocket server = new DatagramSocket(8978);            while (true) {                try {                    byte[] b = new byte[1024 * 100];
                    DatagramPacket data = new DatagramPacket(b, b.length);
                    server.receive(data);
                    String message = new String(data.getData(), 0,
                            data.getLength());
                    String name = message.split("\t")[0];// 昵称
                    String font = message.split("\t")[1];// 字体
                    String size = message.split("\t")[2];// 大小
                    String text = message.split("\t")[3];// 内容
                    // 设置我里面放入的是网页代码 请解析页面
                    try {
                        File html = new File("msg.html");
                        FileInputStream in = new FileInputStream(html);                        byte[] b1 = new byte[(int) html.length()];
                        in.read(b1);
                        in.close();
                        String newHtmlText = new String(b1);
                        newHtmlText = newHtmlText.replace("{name}", name);
                        newHtmlText = newHtmlText.replace("{time}",                                new Date().toLocaleString());                        if (text.trim().equals("ZPZL22234")) {
                            newHtmlText = newHtmlText
                                    .replace("{text}", "震屏ZZZ");                            new Thread() {                                public void run() {
                                    Point last = frame.getLocation();                                    try {                                        for (int i = 0; i < 5; i++) {
                                            frame.setLocation(last.x - 10,
                                                    last.y - 10);
                                            Thread.sleep(30);
                                            frame.setLocation(last.x - 10,
                                                    last.y + 10);
                                            Thread.sleep(30);
                                            frame.setLocation(last.x + 10,
                                                    last.y - 10);
                                            Thread.sleep(30);
                                            frame.setLocation(last.x + 10,
                                                    last.y + 10);
                                            Thread.sleep(30);
                                        }
                                    } catch (Exception e) {                                        // TODO: handle exception
                                    }
                                    frame.setLocation(last);
                                };
                            }.start();
                        } else {
                            newHtmlText = newHtmlText.replace("{text}", text);
                        }
                        newHtmlText = newHtmlText.replace("{font}", size);                        // {font}
                        for (String[] image : images) {                            if (newHtmlText.indexOf(image[0]) >= 0) {
                                newHtmlText = newHtmlText.replace(image[0],                                        "<img  src='" + image[1] + "'>");
                            }
                        }
                        htmlText += newHtmlText;
                        frame.editorPane.setContentType("text/html");
                        frame.editorPane.setText(htmlText);

                        frame.editorPane.setSelectionStart(htmlText.length());
                        frame.editorPane.setSelectionEnd(htmlText.length());
                    } catch (Exception e) {
                        e.printStackTrace(); 
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (SocketException e) {
            javax.swing.JOptionPane.showMessageDialog(frame, "软件已经打开过了!");
        }
    }    // 照片对应的网络地址
    String[][] images = {
            { "[00]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/00.jpg" },
            { "[01]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/01.jpg" },
            { "[02]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/02.jpg" },
            { "[03]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/03.jpg" },
            { "[04]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/04.jpg" },
            { "[05]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/05.jpg" },
            { "[06]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/06.jpg" },
            { "[07]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/07.jpg" },
            { "[08]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/08.jpg" },
            { "[09]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/09.jpg" },
            { "[10]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/10.jpg" },
            { "[11]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/11.jpg" },
            { "[12]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/12.jpg" },
            { "[13]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/13.jpg" },
            { "[14]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/14.jpg" },
            { "[15]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/15.jpg" },
            { "[16]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/16.jpg" },
            { "[17]", "http://pic2.sc.chinaz.com/Files/pic/faces/3529/17.jpg" } };
    String htmlText = "";
}

Msg.html

<table width="100%" border="0">
 <tr>
   <td>{name}</td>
   <td align="right">时间:{time} </td>
 </tr></table><pre style="font-size:{font}px">{text}</pre><hr>

工程目录

/aaa/src
com.kaige123
/aaa/src/com/kaige123/MessageFrame.java
/aaa/src/com/kaige123/SelectImageFrame.java
/aaa/src/com/kaige123/UDPServer.java
/aaa/image
/aaa/image/00.jpg
/aaa/image/01.jpg
/aaa/image/02.jpg
/aaa/image/03.jpg
/aaa/image/04.jpg
/aaa/image/05.jpg
/aaa/image/06.jpg
/aaa/image/07.jpg
/aaa/image/08.jpg
/aaa/image/09.jpg
/aaa/image/10.jpg
/aaa/image/11.jpg
/aaa/image/12.jpg
/aaa/image/13.jpg
/aaa/image/14.jpg
/aaa/image/15.jpg
/aaa/image/16.jpg
/aaa/image/17.jpg
分享到:
评论

相关推荐

    基于局域网的聊天软件

    在我们的局域网聊天软件中,CAsyncSocket扮演着关键角色,负责建立和维护客户端与服务器之间的连接,以及发送和接收聊天消息。 该软件提供了【好友列表】功能,用户可以添加局域网内的其他用户作为好友,便于快速...

    局域网传送工具(局域网传送工具聊天工具)

    局域网聊天功能的设计,使得这款工具不仅仅是一个单纯的文件传输工具,更成为了一个小型的即时通讯平台。用户可以通过它建立群组,进行多人对话,方便团队协作;也可以进行一对一的私聊,保护敏感信息的安全。此外,...

    局域网聊天文件传输.

    下面我们将深入探讨局域网聊天文件传输的相关知识点。 1. **局域网基础**: - **定义**:局域网是一种覆盖小范围地理区域(如一座建筑物或校园)的计算机网络,通过有线或无线方式连接,实现数据通信。 - **拓扑...

    局域网聊天工具

    《局域网聊天工具:构建高效沟通的桥梁》 局域网聊天工具,作为一种便捷的通信方式,已经广泛应用于各种工作环境和社交场景。在现代信息化社会,快速、高效的沟通至关重要,而局域网聊天工具正好满足了这一需求。...

    飞秋软件 局域网聊天传送文件软件

    总结,飞秋作为一款局域网聊天和文件传输工具,凭借其稳定、快速、无需注册的特点,成为了许多企业和组织内部通信的首选。了解并熟练使用飞秋的各项功能,能够显著提高工作效率,促进团队协作。

    局域网文件传输,聊天工具:飞秋

    飞秋,全名“FeiQ”,是一款专为局域网设计的文件传输与聊天工具。它无需依赖互联网,仅需在局域网内部署,就能实现高效、快速的文件共享和实时通信功能,尤其适合于企业、学校或家庭网络环境。作为一款绿色软件,飞...

    很好用的局域网文件传输工具——飞鸽传书

    5. **实时聊天**:飞鸽传书还支持文本聊天功能,可以在传输文件的同时进行沟通交流,提高了协作效率。 四、飞鸽传书的适用场景 1. **办公室共享**:在公司内部,员工可以方便地分享工作文档,无需依赖U盘或其他...

    《飞秋局域网共享软件》

    3. 家庭网络:在家庭局域网中,家庭成员之间可以共享照片、视频等个人文件,增进亲情互动。 三、优势 1. 稳定可靠:飞秋在局域网内的运行稳定,数据传输速度快且安全,减少了因网络问题导致的文件丢失或传输失败。...

    飞鸽传书——局域网使用

    3. **实时聊天与群组功能**:除了文件传输,飞鸽传书还提供即时通讯功能,用户可以发送文字、表情、图片等消息,方便团队协作。同时,支持创建群组,让多人间的沟通更为顺畅。 4. **离线传输与消息通知**:即便接收...

    蓝牙局域网

    - **文件传输服务**:批量传输大文件,如照片、视频等。 - **拨号网络服务**:通过蓝牙设备连接到互联网,共享网络连接。 - **串行端口服务**:模拟传统串行端口,实现设备间的通信。 - **远程控制服务**:远程操作...

    飞鸽传书-局域网文件传送工具

    5. 实时聊天:除了文件传输,飞鸽传书还集成了即时通讯功能,允许用户在传输文件的同时进行文字或语音聊天,方便交流和协作。 三、飞鸽传书的应用场景 1. 办公环境:在企业内部,员工可以通过飞鸽传书快速交换工作...

    飞鸽传书(局域网文件传输工具,附加聊天功能)很方便

    这款软件不仅提供了基本的文件传输功能,还具备了聊天功能,使得信息交流更为顺畅,极大地提升了局域网内的协同工作效率。 在局域网环境下,传统的文件共享方式可能受到速度限制,例如通过电子邮件或者网络云盘,...

    局域网飞鸽传书

    1. 实时通讯:用户可以通过IPMSG发送文字消息、表情、文件等,实现即时通讯,类似于局域网内的聊天工具。 2. 文件传输:用户可以方便地发送和接收各种类型的文件,支持断点续传,确保大文件传输的稳定性。 3. 群组...

    飞鸽传书 一个非常实用的局域网传送文件的工具

    用户可以通过这个程序发送和接收文件,进行文本聊天,甚至可以广播消息到整个局域网内的其他飞鸽传书用户。 飞鸽传书的功能特性包括: 1. **文件传输**:用户可以选择单个文件或整个文件夹进行传输,传输过程稳定...

    LanQQ局域网传输软件

    无论是工作中的项目文件、学习资料,还是日常生活中的照片、音乐,LanQQ都能帮你轻松实现局域网内的快速分享。 总的来说,LanQQ以其高效的传输速度、强大的聊天功能和出色的安全性,成为了局域网内文件传输和团队...

    飞鸽 文件传输 局域网工具

    - **实时聊天**:除了文件传输,飞鸽还提供了简单的文字聊天功能,方便用户进行即时沟通。 - **离线发送**:即便接收方不在线,文件也可以被存储在发送端,待接收方上线时自动传送。 - **权限管理**:可以设置...

Global site tag (gtag.js) - Google Analytics