文档章节

局域网聊天【带照片】

凯哥学堂
 凯哥学堂
发布于 2017/06/28 23:51
字数 1094
阅读 20
收藏 0
点赞 0
评论 0
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

© 著作权归作者所有

共有 人打赏支持
凯哥学堂
粉丝 13
博文 298
码字总数 266259
作品 0
东城
程序员
哎,路还很长呀,.........ㄒoㄒ

我翻阅了许多网络编程方面的书箱,经常可以看到“在局域网下的文字聊天”“在局域网下的视频聊天”这样的字样。但是我用了其中的代码,发现有时用本机在公网的IP也能连接,但有时也连接不上。...

jinx88
2016/07/23
13
0
用QT作的最简单的局域网聊天工具

用QT作的最简单的局域网聊天工具。。。我是想要源代码的~~就是实现局域网之间的聊天工具~谁有帮忙一下~!!新手求教,简单一点的好。如果只有界面的代码也可以~!后多或少有帮助的都可以~求大...

xeinstein
2012/05/11
3.3K
3
有这种软件吗? P2P+WIKI+团队协作+聊天

公司小团队内部要经常分享工具和更新技术文档.(2-3天一次 每个人都要) . 而且团队工作需要实时的交换各种信息, 所以得有个聊天工具 (至少要能发送图片和文档). 为了保障数据安全性, 第三方的...

天国之翼
2013/03/10
601
5
音视频和数据传输的局域网通讯

随着全球信息化进程的不断发展,越来越多的企业使用局域网来管理各种事务。但随着局域网的机器增多,软件的应用对局域网的信息吞吐、处理能力的要求也越高。为解决上述矛盾,就有必要设计一个...

AnyChat
2014/12/19
433
0
Jchatting通过Sina SAE云开发平台高级开发者认证

前几天刚收到中级开发者的证书,并且在上一篇博文Sina SAE云计算平台中级开发者证书中刚刚秀了秀证书~~~通过提交开源项目Jchatting,就通过了高级开发者认证,坐等证书。 Sina SAE的通知: ...

小薇
2012/12/30
0
0
局域网文件传输工具--Dukto

不管是在大学宿舍、合租房、小团队或是大公司的环境下,我们经常都需要通过局域网来传输各种文件/文件夹,从普通的电影、音乐、软件、学习材料、工作资料到大型的游戏、甚至是岛国的动作片等...

fancybird
2012/11/20
4K
0
我,学生,想做个P2P模型的局域网聊天工具

第一次自己做软件…想做一个局域网的聊天工具,就是用校内宿舍的端口,能视频聊天的…不要服务器的,两台电脑练上去就用的…………做软件大至需要的知道了一点点,就是不知道怎么入手…不知道...

xeinstein
2012/03/23
1K
21
[原创]java局域网聊天系统

一款很不错的基于socket编程局域网聊天系统,可以实现多人在线聊天,,设置字体颜色,大小,背景色,快捷键发送消息,设置用户名等功能,正在学习SWING的朋友们可以拿去研究下,对功能进行扩充,完全开...

tojsp_com
2010/07/23
0
0
局域网聊天系统服务器端--SocketServer

SocketServer 是局域网聊天系统服务器端。 1.采用多线程操作避免了程序挂起。 2.同时支持多客户端连接。 2.当开启服务器程序时,每个连到服务器的客户端都会实时更新到客户端列表中。 3.点击...

扒衣姥爷
2015/04/02
1K
0
局域网聊天软件客户端--SocketClient

SocketClient 是局域网聊天软件客户端。 1.采用多线程操作避免了程序挂起。 2.同时支持多客户端连接。 2.当开启服务器程序时,每个连到服务器的客户端都会实时更新到客户端列表中。 3.点击客...

扒衣姥爷
2015/04/02
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

NNS域名系统之域名竞拍

0x00 前言 其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的可以移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。 我这里主要对轻钱包开发中会用到的...

暖冰
今天
0
0
32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0
shell中的函数&shell中的数组&告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

影夜Linux
今天
0
0
Linux网络基础、Linux防火墙

Linux网络基础 ip addr 命令 :查看网口信息 ifconfig命令:查看网口信息,要比ip addr更明了一些 centos 7默认没安装ifconfig命令,可以使用yum install -y net-tools命令来安装。 ifconfig...

李超小牛子
今天
1
0
[机器学习]回归--Decision Tree Regression

CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很...

wangxuwei
昨天
1
0
Redis做分布式无锁CAS的问题

因为Redis本身是单线程的,具备原子性,所以可以用来做分布式无锁的操作,但会有一点小问题。 public interface OrderService { public String getOrderNo();} public class OrderRe...

算法之名
昨天
10
0
143. Reorder List - LeetCode

Question 143. Reorder List Solution 题目大意:给一个链表,将这个列表分成前后两部分,后半部分反转,再将这两分链表的节点交替连接成一个新的链表 思路 :先将链表分成前后两部分,将后部...

yysue
昨天
1
0
数据结构与算法1

第一个代码,描述一个被称为BankAccount的类,该类模拟了银行中的账户操作。程序建立了一个开户金额,显示金额,存款,取款并显示余额。 主要的知识点联系为类的含义,构造函数,公有和私有。...

沉迷于编程的小菜菜
昨天
1
0
从为什么别的队伍总比你的快说起

在机场候检排队的时候,大多数情况下,别的队伍都要比自己所在的队伍快,并常常懊悔当初怎么没去那个队。 其实,最快的队伍只能有一个,而排队之前并不知道那个队快。所以,如果有六个队伍你...

我是菜鸟我骄傲
昨天
1
0
分布式事务常见的解决方案

随着互联网的发展,越来越多的多服务相互之间的调用,这时候就产生了一个问题,在单项目情况下很容易实现的事务控制(通过数据库的acid控制),变得不那么容易。 这时候就产生了多种方案: ...

小海bug
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部