java简易的局域网聊天工具

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 block
101                     e.printStackTrace();
102                 }
103             }
104         }
105
106
107     }
108
109     private void addContent() {
110         // TODO Auto-generated method stub
111         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             @Override
161             public void actionPerformed(ActionEvent e) {
162                 // TODO Auto-generated method stub
163                 msgArea.setText("");
164             }
165
166         });
167         this.fasongBtn.addActionListener(new ActionListener(){
168
169             @Override
170             public void actionPerformed(ActionEvent e) {
171                 // TODO Auto-generated method stub
172                 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 block
191                                 e1.printStackTrace();
192                             } catch (IOException e1) {
193                                 // TODO Auto-generated catch block
194                                 e1.printStackTrace();
195                             } finally{
196                                 if(client != null){
197                                     try {
198                                         client.close();
199                                     } catch (IOException e1) {
200                                         // TODO Auto-generated catch block
201                                         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 block
39             e.printStackTrace();
40         } finally{
41             if(br != null){
42                 try {
43                     br.close();
44                 } catch (IOException e) {
45                     // TODO Auto-generated catch block
46                     e.printStackTrace();
47                 }
48             }
49             if(this.fromClient != null){
50                 try {
51                     this.fromClient.close();
52                 } catch (IOException e) {
53                     // TODO Auto-generated catch block
54                     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 }
时间: 2024-10-16 13:43:01

java简易的局域网聊天工具的相关文章

QT实现局域网聊天工具

三年多以前刚学习QT写的一个局域网聊天工具小项目. 由于是初学QT时写的,代码比较简略,也没时间好好整理项目,仅供大家参考相关TCP以及UDP的连接与传输功能   以及相关控件的基本使用方法. 需要源码学习的留下邮箱~ 1. 客户端程序函数说明 //连接服务器: tcpSocket = new QTcpSocket(this); tcpSocket->connectToHost(serverIP,8000); //断开服务器: tcpSocket->disconnectFromHost();

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

先运行一个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

Qt局域网聊天

原文地址 https://blog.csdn.net/tsvico/article/details/94721560 本次设计是一个简易的局域网聊天,功能设计主要分为群聊和私聊两部分,每部分都支持基础聊天以及文件传输功能,私聊页面相较于主页面支持更多功能,例如表情发送.窗口抖动,语音聊天等.参考了<Qt及Qt Quick开发实战精解>中第5章群聊实例,在群聊的基础设计了私聊这部分内容以及其他一些功能.下面介绍下整体的设计以及实现. 本文档将依据启动次序来写 设计时这里用的是主机的ip地址,可使

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

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

RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)

RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增企业通(内部简易聊天工具) RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案. "企业通"是RDIFramework.NET框架提供的一个即时通讯.内部聊天沟通的工具.虽不能与商业化专业的沟通工具相比,但对于框架内部进行消息的沟通还是比较方便的.成功登录框架后,点击框架主菜单"辅助工具"→"企业通&

基于Java NIO的多人在线聊天工具源码实现(登录,单聊,群聊)

近来在学习Java NIO网络开发知识,写了一个基于Java NIO的多人在线聊天工具练练手.源码公开在Coding上: https://coding.net/u/hust_wsh/p/MyChat/git ,开发环境是Ubuntu14.04+Eclipse Mars+JDK1.8. 要想编写一个基于Java NIO的多人在线聊天工具,我总结需要以下几方面的地址:客户端服务器模型,Java NIO中的Selector,SocketChannel,ByteBuffer,Collections以及序

Java NIO实现的C/S模式多人聊天工具

小弟初学NIO,做了个控制台聊天工具,不知道代码写的如何,望大神们批评指点. 服务器端,两个线程,一个处理客户端请求和转发消息,另一个处理服务器管理员指令,上代码: package kindz.onlinechat; import java.io.IOException; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.cha

实现分布式服务注册及简易的netty聊天

现在很多地方都会用到zookeeper, 用到它的地方就是为了实现分布式.用到的场景就是服务注册,比如一个集群服务器,需要知道哪些服务器在线,哪些服务器不在线. ZK有一个功能,就是创建临时节点,当机器启动应用的时候就会连接到一个ZK节点,然后创建一个临时节点,那么通过获取监听该路径,并且获取该路径下的节点数量就知道有哪些服务器在线了.当机器停止应用的时候,zk的临时节点将会自动被删除.我们通过这个机制去实现. 这次主要实现是采用springboot, zkui, swagger实现.接下来来看

局域网聊天【带照片】

package com.kaige123;/** * 消息页面 * @author 凯哥 * */public class MessageFrame extends JFrame {    //把消息分成两部分    private JSpinner spinner = new JSpinner();    //发送文本框    public JTextArea textArea = new JTextArea();    //网络名称    private String uname="&quo