局域网聊天【带照片】

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
时间: 2024-12-13 14:32:51

局域网聊天【带照片】的相关文章

java Swing局域网聊天软件+ 情侣电脑钢琴

2013年的时候刚刚看完毕向东老师的黑马程序员教程,对swing产生了很浓厚的兴趣,很多朋友应该和我有同样的感受吧!学了这么久java一直都面对 乌漆麻黑的dos窗口搞,终于能做个窗口了,心里好开心的.像看见了光明似的.记得第一次写个程序弹出个Frame的时候心里真的是很激动的.后来我在Swing中花了很多时间去研究,毕竟没有老师指导所以不知道Swing其实也不值得花那么多时间.对于Swing做为了解就好了.有空余时间看看还不错. 不过虽然在Swing耽误了许多时间,但是也做了点东西玩玩咯. 写

用L脚本语言开发一个简单的局域网聊天程序

#scp #这是一个简单的局域网聊天程序的例子 定义:字符串,string1 定义:字符串,string2 #addr1是对方的地址 #addr2是自己的地址 #如果addr1和addr2相同,就是自己和自己聊天 定义:地址,addr1,127.0.0.1,27015 定义:地址,addr2,127.0.0.1,27015 定义:整数,字节数,0 #在自己的UDP端口上监听 定义:网络连接,conn2,UDP 监听:conn2,addr2 #连接对方的UDP端口 定义:网络连接,conn1,UD

简单 《实现局域网聊天室》----待更新...

先运行一个java写的局域网聊天,效果图如下 后使用c#图形修改如下: c#代码: servlet服务端 using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO; using System.T

u3d做的第一个test:局域网聊天,移动

using UnityEngine; using System.Collections; public class server : MonoBehaviour { //端口號 int port =10000; //聊天信息 string Message = ""; //移動信息 string moveinfo = ""; //滾動視圖位置 Vector2 scrollPosition; // Use this for initialization void Sta

javase基础学完可以做什么,javase实现局域网聊天室

包含内容:基础语法,面向对象,多线程,IO流,GUI编程,网络编程(udp) 实现功能:局域网群聊,局域网群发文件(还不太完善,只能传输小体积的文本文件) 由于本人也是刚开始学java,而且掌握的不太好,所以代码可能有些臃肿.请谅解 登录界面 群聊界面 代码写一个java文件里了,不太方便阅读. 1 package test; 2 3 import java.awt.*; 4 import java.awt.event.*; 5 import java.io.*; 6 import java.n

Linux socket跨局域网聊天和文件传输

一直想写一个跨局域网聊天和文件传输,以及视频聊天的软件,这两天刚好闲着没啥事就把代码写完了,代码已经上传至github:https://github.com/vinllen/chat 其实之前想法P2P模式,P2P的话必须穿透NAT,现在的NAT有4种模式: 完全圆锥型NAT 受限圆锥型NAT 端口受限圆锥型NAT 对称NAT(双向NAT) 维基百科给出的定义如下: 1.Full cone NAT,亦即著名的一对一(one-to-one)NAT 一旦一个内部地址(iAddr:port1)映射到外

Qt学习心得之网络编程简单的局域网聊天服务端建立

学而不思则罔,思而不学则殆.学习和思考是相辅相成的,通过这几天对网络编程的学习,收获颇丰.接下来我将利用Qt做的一个以TcpIp协议为传输方式的简单的局域网聊天服务端与大家分享下: 首先谈谈我个人对Tcp协议的理解:Tcp就是网上购物,买家和买家之间的物品传递,快递公司的扮演.快递公司将卖家所要寄出的物品进行包装,给予独特的号码,并从卖家获取目的地地址,得知这些明确信息后准确将物品送到买家,买家签收后,卖家通过快递单号查询到买家签收的消息. 其次是这个简单局域网聊天服务器的创建思路.如下图是思路

【Python】iichats —— 命令行下的局域网聊天程序

转载请声明出处:http://www.cnblogs.com/kevince/p/3941728.html   ——By Kevince ii系列工具第三弹,命令行下的局域网聊天程序 原理: 程序启动时向全网(255.255.255.255)BACKPORT端口广播自己的主机名以及状态(上线). 如果接受收到的上线状态,则将其加入通信列表,同时返还一个数据包,使自己也将对面加入其通信列表. 程序退出时向全网广播自己的下线状态,如果收到该下线状态则将其从自己的通信列表中删除 为了防止在输入过程中被

局域网聊天Chat(马士兵视频改进版)

Github地址: https://github.com/BenDanChen/Chat Chat 小小的聊天系统,主要是跟着网上的马士兵老师的公开视频然后再自己反思有什么地方需要改进的地方,然后大体功能完成后又按照自己的想法进行了重构,程序比较小,只有五百行左右,实现的功能如下: 局域网聊天(需要有一个服务器,是传统的BS架构的) 进行了检测避免2B恶意刷屏(记录上次发消息时间,设定最小发送消息的间隔) 支持悄悄话,即单独的发送消息给某一个用户,使用[:to who message]的命令格式