博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java简易的局域网聊天工具
阅读量:6711 次
发布时间:2019-06-25

本文共 12823 字,大约阅读时间需要 42 分钟。

main方法

1 package com.lovo.work; 2  3 public class Test { 4  5      6  7     public static void main(String[] args) { 8         // TODO Auto-generated method stub 9       new FeiqiuFrame();10         11         12     }13 14 }

主程序:文件中是姓名和IP,用键值对的方式写入

1 package com.lovo.work;  2   3 import java.awt.Color;  4 import java.awt.Container;  5 import java.awt.Font;  6 import java.awt.Toolkit;  7 import java.awt.event.ActionEvent;  8 import java.awt.event.ActionListener;  9 import java.io.BufferedReader; 10 import java.io.BufferedWriter; 11 import java.io.FileInputStream; 12 import java.io.FileNotFoundException; 13 import java.io.IOException; 14 import java.io.InputStreamReader; 15 import java.io.ObjectInputStream; 16 import java.io.OutputStreamWriter; 17 import java.net.ServerSocket; 18 import java.net.Socket; 19 import java.net.UnknownHostException; 20 import java.text.SimpleDateFormat; 21 import java.util.Calendar; 22 import java.util.HashMap; 23 import java.util.Properties; 24 import java.util.Set; 25  26 import javax.swing.JButton; 27 import javax.swing.JCheckBox; 28 import javax.swing.JComboBox; 29 import javax.swing.JFrame; 30 import javax.swing.JOptionPane; 31 import javax.swing.JScrollPane; 32 import javax.swing.JTextArea; 33 import javax.swing.JTextField; 34  35 public class FeiqiuFrame extends JFrame{ 36      37  38      39     private Container contentP; 40     private JTextArea msgArea; 41     private JTextField IPTxt; 42     private JButton qingkongBtn; 43     private JTextField wenbenTxt; 44     private JButton fasongBtn; 45     private String msg; 46     private Socket fromClient; 47     private String str3; 48     private JComboBox classComb; 49     private Properties pro; 50     private JCheckBox xuanze; 51  52      53          54      55  56     public FeiqiuFrame() { 57         pro=new Properties(); 58         try { 59             pro.load(new FileInputStream("j124.properties"));// 60         } catch (FileNotFoundException e) { 61             // TODO Auto-generated catch block 62             e.printStackTrace(); 63         } catch (IOException e) { 64             // TODO Auto-generated catch block 65             e.printStackTrace(); 66         } 67          68         this.setSize(400, 350); 69         Toolkit tk = Toolkit.getDefaultToolkit(); 70         int screenW = (int) tk.getScreenSize().getWidth();// 得到屏幕宽 71         int screenH = (int) tk.getScreenSize().getHeight();// 得到屏幕高 72         this.setLocation((screenW - 400) / 2, (screenH - 510) / 2); 73         this.setTitle("我的飞秋"); 74         // 设置窗体关闭即为关闭程序 75         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 76         // 设置窗体内容面板上所有的东西 77         this.addContent(); 78         // 设置窗体可见 79         this.setVisible(true); 80          81          82          83         ServerSocket server = null; 84         try { 85             server = new ServerSocket(9527); 86             while (true) { 87                 // accept是阻塞方法,直到监听到客户端发送过来的消息 88                 Socket fromClient = server.accept(); 89                 new MSGThread(fromClient,this).start(); 90                  91             } 92         } catch (IOException e) { 93             // TODO Auto-generated catch block 94             e.printStackTrace(); 95         } finally { 96             if (server != null) { 97                 try { 98                     server.close(); 99                 } catch (IOException e) {100                     // TODO Auto-generated catch block101                     e.printStackTrace();102                 }103             }104         }105         106         107     }108 109     private void addContent() {110         // TODO Auto-generated method stub111         this.contentP = this.getContentPane();112         // 设置窗体面板的背景色113         this.contentP.setBackground(Color.WHITE);114         // 设置容器的布局管理器为空---空布局管理115         this.contentP.setLayout(null);116         117         this.msgArea = new JTextArea();118         JScrollPane sp = new JScrollPane(this.msgArea);119         sp.setBounds(15, 20, 365, 200);120         msgArea.setEditable(false);121         122 //        this.msgArea.setBorder(BorderFactory.createLineBorder(Color.BLACK));123         this.contentP.add(sp);124         125         126         127         this.wenbenTxt = new JTextField();128         this.wenbenTxt.setFont(new Font("微软雅黑", Font.ITALIC,15));129         this.wenbenTxt.setForeground(Color.BLUE);130         this.wenbenTxt.setBounds(15, 230, 110, 25);131         this.contentP.add(this.wenbenTxt);132         133         this.fasongBtn = new JButton();134         this.fasongBtn .setText("发送");135         this.fasongBtn .setFont(new Font("微软雅黑", Font.PLAIN, 15));136         this.fasongBtn .setForeground(Color.BLUE);137         this.fasongBtn .setBounds(130, 230, 65, 25);138         139         140         this.classComb = new JComboBox(this.pro.keySet().toArray());141         this.classComb.setEditable(true);142         this.classComb.setBounds(210, 230,90, 25);143         this.contentP.add(this.classComb);144         145 146         this.xuanze = new JCheckBox("自动回复");147         this.xuanze.setBackground(new Color(225, 249, 255));148         this.xuanze.setBounds(15, 270, 100, 25);149         this.contentP.add(this.xuanze);150         151         152         this.qingkongBtn = new JButton();153         this.qingkongBtn.setText("清空");154         this.qingkongBtn.setFont(new Font("微软雅黑", Font.PLAIN, 15));155         this.qingkongBtn.setForeground(Color.BLUE);156         this.qingkongBtn.setBounds(310, 230, 65, 25);157         this.contentP.add(this.qingkongBtn);158         this.qingkongBtn.addActionListener(new ActionListener(){159 160             @Override161             public void actionPerformed(ActionEvent e) {162                 // TODO Auto-generated method stub163                 msgArea.setText("");164             }165             166         });167         this.fasongBtn.addActionListener(new ActionListener(){168 169             @Override170             public void actionPerformed(ActionEvent e) {171                 // TODO Auto-generated method stub172                 String str=wenbenTxt.getText();173                 String ipstr=(String)FeiqiuFrame.this.getClassComb().getSelectedItem();174                 String IP=FeiqiuFrame.this.pro.getProperty(ipstr);175                 176                 String str2 = str.replaceAll(" ", "");177                 if(str2!=null&&!str2.equals("")){178                     if(IP.matches("(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)){3}")){179                             msg="XX&"+str2;180                             str3=msgArea.getText();181                             msgArea.setText(str3+"\n"+getFormatDate()+"\n"+"我说:"+str2);182                                     183                             Socket client = null;        184                             try {185                                 client = new Socket(IP, 9527);186                                 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));187                                 bw.write(msg);188                                 bw.flush();189                             } catch (UnknownHostException e1) {190                                 // TODO Auto-generated catch block191                                 e1.printStackTrace();192                             } catch (IOException e1) {193                                 // TODO Auto-generated catch block194                                 e1.printStackTrace();195                             } finally{196                                 if(client != null){197                                     try {198                                         client.close();199                                     } catch (IOException e1) {200                                         // TODO Auto-generated catch block201                                         e1.printStackTrace();202                                     }203                                 }204                             }205                     }else{206                         JOptionPane.showMessageDialog(fasongBtn, "IP输入不正确!");207                     }208                     209                 }else{    210                     JOptionPane.showMessageDialog(fasongBtn, "消息输入不能为空!");211                 }212             }213         });214         215         this.contentP.add(this.fasongBtn );216         217     }218     public static String getFormatDate()219     {220         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");221         return sdf.format(Calendar.getInstance().getTime());222     }223 224     public Container getContentP() {225         return contentP;226     }227 228     public void setContentP(Container contentP) {229         this.contentP = contentP;230     }231 232     public JTextArea getMsgArea() {233         return msgArea;234     }235 236     public void setMsgArea(JTextArea msgArea) {237         this.msgArea = msgArea;238     }239 240     public JTextField getIPTxt() {241         return IPTxt;242     }243 244     public void setIPTxt(JTextField iPTxt) {245         IPTxt = iPTxt;246     }247 248     public JButton getQingkongBtn() {249         return qingkongBtn;250     }251 252     public void setQingkongBtn(JButton qingkongBtn) {253         this.qingkongBtn = qingkongBtn;254     }255     256 257     public JComboBox getClassComb() {258         return classComb;259     }260 261     public void setClassComb(JComboBox classComb) {262         this.classComb = classComb;263     }264 265     public JTextField getWenbenTxt() {266         return wenbenTxt;267     }268 269     public void setWenbenTxt(JTextField wenbenTxt) {270         this.wenbenTxt = wenbenTxt;271     }272 273     public JButton getFasongBtn() {274         return fasongBtn;275     }276 277     public void setFasongBtn(JButton fasongBtn) {278         this.fasongBtn = fasongBtn;279     }280 281     public String getMsg() {282         return msg;283     }284 285     public void setMsg(String msg) {286         this.msg = msg;287     }288 289     public Socket getFromClient() {290         return fromClient;291     }292 293     public void setFromClient(Socket fromClient) {294         this.fromClient = fromClient;295     }296 297     public String getStr3() {298         return str3;299     }300 301     public void setStr3(String str3) {302         this.str3 = str3;303     }304     305     306 }

数据的传输

1 package com.lovo.work; 2  3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.net.Socket; 7 import java.text.SimpleDateFormat; 8 import java.util.Calendar; 9 import java.util.Date;10 11 public class MSGThread extends Thread{12     13     private Socket fromClient;14     private FeiqiuFrame feiqiuframe;15     16     public MSGThread(Socket fromClient,FeiqiuFrame feiqiuframe){17         this.fromClient = fromClient;18         this.feiqiuframe = feiqiuframe;19     }20     21     public void run(){22         BufferedReader br = null;23         try {24             br = new BufferedReader(new InputStreamReader(25                     fromClient.getInputStream()));26             String str = br.readLine();27             String[] allMsg = str.split("&");28             String str2=MSGThread.this.feiqiuframe.getMsgArea().getText();29             String str1=allMsg[0] + "说:" + allMsg[1];30             String str3=str2+"\n"+getFormatDate()+"\n"+str1;31             MSGThread.this.feiqiuframe.setStr3(str3);32             MSGThread.this.feiqiuframe.getMsgArea().setText(MSGThread.this.feiqiuframe.getStr3());33 //        System.out.println(str2);34 //        System.out.println(str1);35 //        System.out.println(str3);36     37         } catch (IOException e) {38             // TODO Auto-generated catch block39             e.printStackTrace();40         } finally{41             if(br != null){42                 try {43                     br.close();44                 } catch (IOException e) {45                     // TODO Auto-generated catch block46                     e.printStackTrace();47                 }48             }49             if(this.fromClient != null){50                 try {51                     this.fromClient.close();52                 } catch (IOException e) {53                     // TODO Auto-generated catch block54                     e.printStackTrace();55                 }56             }57         }58         59         60     }61 62     public static String getFormatDate()63     {64         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");65         return sdf.format(Calendar.getInstance().getTime());66     }67     68 }

 

转载于:https://www.cnblogs.com/chenwei123/p/5598127.html

你可能感兴趣的文章
mesos+marathon+zookeeper的docker管理集群亲手搭建实例(环境Centos6.8)
查看>>
你应了解的4种JS设计模式
查看>>
垃圾收集器Serial 、Parallel、CMS、G1
查看>>
mongodb基本概念解析
查看>>
前端学HTTP之网关、隧道和中继
查看>>
安卓手机使用Fiddler抓获HTTPS报文方法
查看>>
使用 NGINX 和 NGINX Plus 的 Ingress Controller 进行 Kubernetes 的负载均衡
查看>>
Jenkins部署Web项目到远程tomcat(通过jenkins插件)
查看>>
数据机构与算法-数据结构的一些基本概念
查看>>
Google开源基于Tensorflow的NLP框架重大升级
查看>>
正则表达式工具RegexBuddy使用教程
查看>>
异常体系
查看>>
OpenCV【2】---读取png图片显示到QT label上的问题
查看>>
Fedora 25-64位操作系统中安装配置Hyperledger Fabric过程
查看>>
.Net Core 部署到 CentOS7 64 位系统中的步骤
查看>>
【js中数组和字符串的相互转换】
查看>>
node.js之web开发 koa入门
查看>>
混淆矩阵
查看>>
生成1000万行7位数字文件(编程珠玑)
查看>>
初识 systemd
查看>>