吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5628|回复: 13
收起左侧

[其他原创] 一个聊天工具

[复制链接]
GH逐风 发表于 2017-8-21 20:28
本帖最后由 GH逐风 于 2017-8-21 22:02 编辑

实现一个简单的靠IP地址聊天的工具
[Java] 纯文本查看 复制代码
package com.gh.liaotianshi;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowStateListener;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.BrokenBarrierException;

public class LiaoTianShi extends Frame{

        private TextArea faSongKuang;
        private TextArea xianShiKuang;
        private TextField tf;
        private Button faSong;
        private Button jiLu;
        private Button qingPing;
        private Button zhenDong;
        private DatagramSocket socket;
        private BufferedWriter bw;

        /**
         * @param args
         */
        public static void main(String[] args) {
                new LiaoTianShi();
        }

        public  LiaoTianShi() {
                windows();
                xiaPanel();
                shangPanel();
                new jieShou().start();
                try {
                        socket = new DatagramSocket();
                        bw = new BufferedWriter(new FileWriter("data.txt", true));
                } catch (Exception e) {
                        
                        e.printStackTrace();
                }
                event();
        }
        /*
         * 创建一个按钮事件
         * 1.X按钮,退出jvm;
         * 2.发送按钮,发送在发送框输入的消息
         * 3.聊天记录按钮,将数据库的聊天记录在显示框显示
         * 4.清屏按钮,清空显示框
         * 5.震动,发送给对方一个震动
         */
        private void event() {
                this.addWindowListener(new WindowAdapter() {
                        public void windowClosing(WindowEvent e)  {                        
                                try {
                                        bw.close();                                                             //关闭 BufferedWriter
                                        socket.close();                                                                //关闭 DatagramSocket
                                } catch (IOException e1) {
                                        
                                        e1.printStackTrace();
                                }
                                System.exit(0);                                                                        //退出jvm
                        }
                });
                
                faSong.addActionListener(new ActionListener() {
                        
                        @Override
                        public void actionPerformed(ActionEvent e) {
                                try {
                                        faSong();
                                } catch (Exception e1) {
                                        
                                        e1.printStackTrace();
                                }
                        }

                });
                
                jiLu.addActionListener(new ActionListener() {
                        
                        @Override
                        public void actionPerformed(ActionEvent e) {
                                try {
                                        data();
                                } catch (IOException e1) {
                                        
                                        e1.printStackTrace();
                                }
                        }

                });
                
                qingPing.addActionListener(new ActionListener() {
                        
                        @Override
                        public void actionPerformed(ActionEvent e) {
                                qingPing();
                        }

                });
                
                zhenDong.addActionListener(new ActionListener() {
                        
                        @Override
                        public void actionPerformed(ActionEvent e) {
                                try {
                                        faSong(new byte[]{-1}, tf.getText());
                                } catch (Exception e1) {
                                        
                                        e1.printStackTrace();
                                }
                        }

                });
                        
                faSongKuang.addKeyListener(new KeyAdapter() {
                        @Override
                        public void keyReleased(KeyEvent e) {
                                if(e.getKeyCode() == KeyEvent.VK_ENTER) {
                                        try {
                                                faSong();
                                        } catch (Exception e1) {
                                                
                                                e1.printStackTrace();
                                        }
                                }
                        }
                });
        }
        
        private void zhenDong() {
                int x = this.getLocation().x;                                                //获取x坐标
                int y = this.getLocation().y;                                                //获取y坐标
                
                //改变坐标位置达到震动效果
                for(int i = 0;i < 50;i++) {        
                        this.setLocation(x + 15, y + 5);
                        this.setLocation(x - 15, y - 5);
                        this.setLocation(x + 15, y - 5);
                        this.setLocation(x - 15, y + 5);
                        this.setLocation(x, y);
                }
        }
        private void qingPing() {
                xianShiKuang.setText("");                        //清空显示框
        }
        private void data() throws IOException {
                bw.flush();                                                                                                                //刷新缓存
                FileInputStream fis = new FileInputStream("data.txt");                        //读取数据库文件
                ByteArrayOutputStream baos = new ByteArrayOutputStream();                //创建内存缓冲区
                
                int len;
                byte[] arr = new byte[1024 * 8];
                while((len = fis.read(arr)) != -1) {                                                        //写出数据库文件到缓冲区
                        baos.write(arr, 0, len);
                }
                
                String s = baos.toString();                                                                                //将字节转换为字符串
                
                xianShiKuang.setText(s);                                                                                //将字符串显示到显示框
                
                baos.close();
                fis.close();
        }
        private void faSong() throws Exception {
                String xiaoXi = faSongKuang.getText();                                                        //获取发送框中输入的消息
                String ip = tf.getText();                                                                                //获取输入的IP地址
                
                faSong(xiaoXi.getBytes(), ip);
                
                String time = getTime();                                                                                //获取当前时间
                String str = time + " " + ip + " 说:\r\n" + xiaoXi + "\r\n\r\n";
                xianShiKuang.append(str);                                                                                //将字符串添加到显示框
                bw.write(str);                                                                                                        //将发送的消息添加进数据库
                faSongKuang.setText("");                                                                                //清空发送框
                
                
        }

        public void faSong(byte[] arr, String ip) throws Exception {
                DatagramPacket packet =                                                                                 //确定发送的消息,ip,端口
                                new DatagramPacket(arr, arr.length, InetAddress.getByName(ip),6969);
                socket.send(packet);                                                                                        //发送消息
        }

        private String getTime() {                                                                                        //获取当前时间的方法
                Date d = new Date();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年DD月mm日 HH:mm:ss");
                return sdf.format(d);
        }

        private void shangPanel() {                                                                                        
                Panel p = new Panel();                                                                                        //创建panel
                xianShiKuang = new TextArea();                                                                        //创建文本框
                faSongKuang = new TextArea(5,1);
                p.setLayout(new BorderLayout());                                                                //设置布局管理器
                p.add(xianShiKuang,BorderLayout.CENTER);                                                //将文本开框添加到panel
                p.add(faSongKuang,BorderLayout.SOUTH);
                xianShiKuang.setEditable(false);                                                                //设置显示框不可写
                xianShiKuang.setBackground(Color.WHITE);                                                //设置显示框的颜色
                xianShiKuang.setFont(new Font("jj", Font.PLAIN, 15));                        //设置字体
                faSongKuang.setFont(new Font("jj", Font.PLAIN, 15));
                this.add(p, BorderLayout.CENTER);                                                                //将panel添加到frame
                
        }

        public void xiaPanel() {
                Panel p = new Panel();
                tf = new TextField(15);                                                                                        //创建ip输入文本框
                faSong = new Button("发 送");                                                                                //创建按钮
                jiLu = new Button("聊天记录");
                qingPing = new Button("清 屏");
                zhenDong = new Button("震 动");
                p.add(tf);                                                                                                                //将按钮添加到panel
                tf.setText("127.0.0.1");
                p.add(faSong);
                p.add(jiLu);
                p.add(qingPing);
                p.add(zhenDong);
                this.add(p,BorderLayout.SOUTH);                                                                        //将panel添加到frame
                
        }

        public void windows() {        
                this.setSize(400,600);                                                                                        //设置窗体大小
                this.setLocation(500, 60);                                                                                //设置窗体位置
                this.setIconImage(Toolkit.getDefaultToolkit().createImage("GH.png"));        //设置图标
                this.setVisible(true);                                                                                        //设置窗体可见
                this.setTitle("吾爱聊天室");                                                                                        //设置名字
        }
        
        public class jieShou extends Thread {
                public void run() {
                        try {
                                DatagramSocket socket = new DatagramSocket(6969);
                                DatagramPacket packet = new DatagramPacket(new byte[1024 * 8], 1024 * 8);
                                
                                while(true) {
                                        socket.receive(packet);
                                        
                                        byte[] arr = packet.getData();
                                        int len = packet.getLength();
                                        
                                        if(arr[0] == -1 && len == 1) {
                                                zhenDong();
                                                continue;
                                        }
                                        String s = new String(arr,0, len);
                                        String time = getTime();
                                        String ip = packet.getAddress().getHostAddress();
                                        String str = time + " " + ip + " 说:\r\n" + s + "\r\n\r\n";
                                        xianShiKuang.append(str);
                                        bw.write(str);
                                }
                                
                        } catch (Exception e) {
                                
                                e.printStackTrace();
                        }
                }
                
        }

}



弄了一个jar文件,安装了jvm的可以把聊天室运行起来

屌丝通道链接: https://pan.baidu.com/s/1skXgvQP 密码: vymr

土豪通道:


吾爱聊天室.zip

8.48 KB, 下载次数: 78, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 4吾爱币 +4 热心值 +4 收起 理由
Rainbow丶sugar + 1 + 1 谢谢@Thanks!
雫Hao洋洋 + 1 + 1 热心回复!
Bad丶Boy + 1 + 1 厉害,谢谢分享 看看
龚叶宇 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

2909094965 发表于 2017-8-21 20:42
谢谢分享。持续关注,别失望啊
xiyou2015 发表于 2017-8-21 20:53
头像被屏蔽
Rose,Xin 发表于 2017-8-21 21:01
loleney 发表于 2017-8-21 21:10
这是简易聊天室吧好像
天空之城2016 发表于 2017-8-21 21:22
厉害了我的哥
sbtabtg123 发表于 2017-8-21 21:24 来自手机
厉害了我的哥
骑狗的猴子 发表于 2017-8-21 21:30
java写的  但是貌似这个 拿到了也不能用  不过可以借鉴思路
fq645122 发表于 2017-8-21 21:44
可以很可以啊
宁火贤 发表于 2017-8-21 21:56
大神,有没有恢复聊天记录的软件的?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 17:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表