java编写的简单局域网聊天室(适合初学者).

import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color;import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; import java.awt.Panel; import java.awt.Point; import java.awt.TextArea; importjava.awt.TextField;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File;import java.io.FileWriter; import java.io.IOException;import .DatagramPacket; import .DatagramSocket; import.InetAddress;import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class GUI_Chat extends Frame {private static final long serialVersionUID = 1L;private TextArea viewTextArea = new TextArea(20, 1; private TextArea sendTextArea = new TextArea(; private TextField ipTextField = new TextField(20; private Button sendButton = new Button(" 发送" ; private Button clearButton = new Button(" 清屏" ; private Button logButton = new Button(" 记录" ; private Button shakeButton = new Button(" 震动" ; private Panel panel = new Panel(; private DatagramSocket socket ;private Lock lock = new ReentrantLock(; private FileWriter fw ;public GUI_Chat( throws Exception {socket = new DatagramSocket(20000;fw = new FileWriter("log.txt" , true ;generateUI(; addListener(;new ReceiveThread(.start(;// 开启接收数据的线程}private void generateUI( { setTitle("GUI 聊天室" ; setSize(400, 600; setLocation(600, 50;setMinimumSize(new Dimension(400, 600; // 设置最小尺寸Font font = new Font("Courier New", Font.PLAIN , 15;viewTextArea .setFont(font; // 设置字体viewTextArea .setEditable(false ; // 设置不可编辑(会改变背景色viewTextArea .setBackground(Color.WHITE ; // 设置背景色add(viewTextArea , BorderLayout.NORTH ; // 把viewTextArea 放在上面sendTextArea .setFont(font;add(sendTextArea , BorderLayout.CENTER ; // 把sendTextArea 放在中间panel .add(ipTextField ; panel .add(sendButton ; panel .add(clearButton ; panel .add(logButton ;panel .add(shakeButton ;add(panel , BorderLayout.SOUTH ;// 把Panel 放在下面}private void addListener( { addWindowListener(new WindowAdapter( { // 关闭窗体public void windowClosing(WindowEvent e { try {fw .close(;} catch (IOException e1 { e1.printStackTrace(; }System. exit (0; } };sendButton .addActionListener(new ActionListener( { // 发送功能public void actionPerformed(ActionEvent e {send(;} };sendTextArea .addKeyListener(new KeyAdapter( { // 处理快捷键 public void keyPressed(KeyEvent e {if (e.isControlDown( && e.getKeyCode( == KeyEvent. VK_ENTER ||e.isAltDown( && e.getKeyCode( == KeyEvent.VK_S { send(; e.consume(; // 取消当前事件 } } };clearButton .addActionListener(new ActionListener( { // 清屏功能 public void actionPerformed(ActionEvent e { viewTextArea .setText("" ; } };logButton .addActionListener(new ActionListener( { // 聊天记录public void actionPerformed(ActionEvent e { showLog(; } };shakeButton .addActionListener(new ActionListener( { public void actionPerformed(ActionEvent e { sendShake(; } }; }private void sendShake( { try {String ip = ipTextField .getText(; sendData(ip, new byte [] { -1 }; // 向执行IP 发送一个特殊的消息 } catch (Exception e { e.printStackTrace(; }}private void showLog( {try (Scanner scanner = new Scanner(new File("log.txt" ;{ viewTextArea .setText("" ; // 清屏fw .flush(;// 把未保存的数据写入文件while (scanner.hasNextLine( // 如过文件中有数据就进入循环viewTextArea .append(scanner.nextLine( + "\r\n"; // 从文件读取一行, 追加到viewTextArea 中} catch (Exception e { e.printStackTrace(; } }private void send( { try { String msg = sendTextArea .getText(; // 获取要发的内容String ip = ipTextField .getText(; // 获取目标地址ip = ip.trim(.length( == 0 ? "255.255.255.255" : ip;String content = getTime( + " 我对 <" + (ip.equals("255.255.255.255" ? " 所有人" : ip + "> 说: \r\n" + msg + "\r\n\r\n";lock .lock(; // 开始同步 sendData(ip, msg.getBytes(; // 发送数据sendTextArea .setText("" ; // 清空viewTextArea .append(content; // 把要显示的内容追加到viewTextArea 中fw .write(content; // 保存聊天记录 lock .unlock(; // 结束同步 } catch (Exception e { e.printStackTrace(; } }private void sendData(String ip, byte [] data throws Exception { DatagramPacket packet = new DatagramPacket(data, data. length , InetAddress. getByName (ip, 20000; socket .send(packet;// UDP发送数据}private String getTime( { Date date = new Date(;SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"; return sdf.format(date; // 返回当前时间字符串 }private class ReceiveThread extends Thread { public void run( {DatagramPacket packet = new DatagramPacket(new byte [8192], 8192; while (true { try {socket .receive(packet;byte [] arr = packet.getData(; int length = packet.getLength(;String s = new String(arr, 0, length; // 接收到的字符串String ip = packet.getAddress(.getHostAddress(;String content = getTime( + " <" + ip + "> 对我说:\r\n" + s + "\r\n\r\n"; // 在viewTextArea 中显示的内容if (length == 1 && arr[0] == -1 { // 判断是否收到震动消息 doShake(; // 震动(改变位置 continue ; // 进入下一次循环 }lock .lock(; // 开始同步viewTextArea .append(content;fw .write(content; // 保存聊天记录 lock .unlock(;// 结束同步} catch (IOException e { e.printStackTrace(; }}}}private void doShake( { //震动方法 (通过改变窗体的位置实现 try {Point point = getLocation(; for (int i = 0; i < 5; i++ { Thread. sleep (30;setLocation(point.x + 5, point.y ; Thread. sleep (30;setLocation(point.x - 5, point.y + 5; }setLocation(point;} catch (InterruptedException e { e.printStackTrace(; } }public static void main(String[] args throws Exception { new GUI_Chat(.setVisible(true ; }}。

合集下载

JAVA局域网聊天系统源代码

JAVA局域网聊天系统源代码

这是我自己做的简单聊天系统客户端package LiaoTianSys;import java.awt.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import .Socket;import .UnknownHostException;public class ConversationFrame extends JFrame {JScrollPane jsp;JTextField jtf;static JTextArea jta;//JTextArea jat1,jta2;JButton enter=new JButton("发送");JButton jb=new JButton("聊天室好友");JButton jb2=new JButton("进入聊天室");JButton jb3=new JButton("刷新在线人员列表");JPanel jp,jp1,jp3,jp4;DefaultListModel listmodel = new DefaultListModel();//static String[] NAME=new String[10];String n[]={"f"};JList list=new JList(listmodel);JLabel time=new JLabel("当前系统时间:");JLabel showtime=new JLabel("显示时间");JLabel jl=new JLabel("输聊天信息");JLabel nicheng=new JLabel("昵称");JTextField NCshuru=new JTextField(10);static DataOutputStream dos;static DataInputStream dis;//final LoginFrame lf;Socket socket;public ConversationFrame(){Container con=getContentPane();con.setLayout(new BorderLayout());jp=new JPanel();setSize(700,600);setLocation(100,100);jta=new JTextArea();jta.setEditable(false);jsp=new JScrollPane(jta);con.add(jsp,BorderLayout.CENTER);jtf=new JTextField(20);jp.add(jl);jp.add(jtf);jp.add(enter);con.add(jp,BorderLayout.SOUTH);jp1=new JPanel(new BorderLayout());JScrollPane jsp1=new JScrollPane(list);jp1.add(jsp1,BorderLayout.CENTER);jp1.add(jb,BorderLayout.NORTH);con.add(jp1,BorderLayout.EAST);//pack();jp3=new JPanel();jp3.add(nicheng);jp3.add(NCshuru);jp3.add(jb2);con.add(jp3,BorderLayout.NORTH);jp4=new JPanel(new GridLayout(10,1));jp4.add(jb3);jp4.add(time);jp4.add(showtime);new getTime(this).start();con.add(jp4,BorderLayout.WEST);setVisible(true);// 发送信息给所有人enter.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubString info=jtf.getText();try {dos.writeUTF(NCshuru.getText()+" 对所有人说:"+info);dos.flush();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}});//进入聊天室时将自己的昵称发给服务器,首先去验证是否会与已有的人同名,本聊天室是不支持同昵称聊天jb2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){String msg=NCshuru.getText().toString();//得到昵称if(msg.length()==0){JOptionPane.showMessageDialog(null, "昵称不应该为空,", "温馨提示", RMA TION_MESSAGE);}{try{dos.writeUTF("name"+msg);dos.flush();}catch(Exception ex){System.out.println(ex.getMessage());}}}});//向服务器请求更新在线人员列表jb3.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){try {listmodel.removeAllElements();//请求之前删除JList对象中的所有内容dos.writeUTF("请求更新在线人员列表");dos.flush();} catch (IOException e1) {// TODO Auto-generated catch block//e1.printStackTrace();System.out.println(e1.getMessage());}}});//当有在线人员时,双击JList列表某项弹出私聊对话框事件,匿名内部类实现的list.addMouseListener(new MouseAdapter(){public void mouseClicked(MouseEvent e){if(e.getClickCount()==2){int index=list.locationToIndex(e.getPoint());// 获得list表中的索引值String recevier=(String)listmodel.getElementAt(index);//得到索引对应的值String sender=NCshuru.getText();new Danliao(sender,recevier,socket);}}});}public static void main(String[] args) {ConversationFrame Con=new ConversationFrame();Con.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Con.kaishi();}public void kaishi(){try {socket=new Socket("172.16.14.60",8888);dos=new DataOutputStream(socket.getOutputStream());dis=new DataInputStream(socket.getInputStream());pc pc1=new pc(socket,this);//传送套接字,本类对象给pc线程pc1.start();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}// pc线程类,负责接收服务器发送来的信息class pc extends Thread{ ConversationFrame conver;Socket socket;public pc(Socket socket,ConversationFrame conver){this.conver=conver;this.socket=socket;}public void run(){try {int i=0;while(true){String line;//从线路读取信息line=ConversationFrame.dis.readUTF();// 将所有的在线人员昵称发送给JList,并添加到在线人列表中if(line.startsWith("N"))// 服务器发送过来的信息的格式是N+{String na=line.substring(1);try{conver.listmodel.addElement(na);System.out.println(na);}catch(Exception e){System.out.println(e.getMessage());}}//接受服务器发来的广播聊天信息else{ConversationFrame.jta.append(line+"\n");}}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println(e.getMessage());}}}服务器端package LiaoTianSys;import java.io.*;import .*;import java.util.*;public class Server implements Runnable{public static final int port=8888;protected ServerSocket ss;static Vector connections;Thread connect;public Server(){try {ss=new ServerSocket(port);connections=new Vector(1000);connect=new Thread(this);connect.start();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {new Server();}public void run(){try{while(true){Socket client=ss.accept();System.out.println("客户端连接上");firstthread f=new firstthread(this,client);f.setPriority(Thread.MIN_PRIORITY);f.start();connections.addElement(f);}}catch(IOException e){System.out.println(e.getMessage());}}//向所有人发送聊天信息public void SenAll(String msg){int i;firstthread ft;for(i=0;i<connections.size();i++){ft=(firstthread)connections.elementAt(i);try{ft.out.writeUTF(msg);}catch(Exception e){System.out.println(e.getMessage());}}}//发送单聊信息的方法public void SenOne(String msg){int i;firstthread ft;/*String s1,s2,s3;s1=new String("people");s2=new String(msg.substring(2));//私信为两个字s3=s1.conString msg="我悄悄的对小花说你好啊";cat(s2);*/int begin=msg.indexOf("对");int end=msg.indexOf("说");begin=begin+1;String strNew=msg.substring(begin,end);for(i=0;i<connections.size();i++)//遍历线程,找到要发送的对象{ft=(firstthread)connections.elementAt(i);//遍历线程if(strNew.startsWith()){System.out.println();try{String MSG=msg.substring(7);ft.out.writeUTF(MSG);}catch(IOException e){System.out.println(e.getMessage());}}}}}class firstthread extends Thread{protected Socket client;String line,name=null;DataOutputStream firstout,out;DataInputStream in;Server server;public firstthread(Server server,Socket socket){this.server=server;this.client=socket;try{in=new DataInputStream(client.getInputStream());out=new DataOutputStream(client.getOutputStream());firstout=new DataOutputStream(client.getOutputStream());}catch(IOException e){server.connections.removeElement(this);}}//客户线程运行的方法,不断监听客户线路发送的来的信息,然后决定转发方式public void run(){try{while(true){line=in.readUTF();if(line.startsWith("name")){//获取当前线程firstthreadd=(firstthread)(server.connections.elementAt(server.connections.indexOf(this)));line=line.substring(4);if(==null){=line;}}//将服务器的所有在线人员的昵称发送给所有的客户端else if(line.startsWith("请求更新在线人员列表")){try{for(int i=0;i<server.connections.size();i++){firstthread c=(firstthread)(server.connections.elementAt(i));if(!=null){firstout.writeUTF("N"+);//发送昵称}}}catch(Exception e){System.out.println(e.getMessage());}}else if(line.startsWith("private")){server.SenOne(line);}//发送聊天信息给所有的pc客户端else{server.SenAll(line);}}}catch(IOException e){System.out.println(e.getMessage());}}}显示时间package LiaoTianSys;import java.text.SimpleDateFormat;import java.util.Date;public class getTime extends Thread{String time;ConversationFrame conver;public getTime(ConversationFrame conver){this.conver=conver;System.out.println("获得系统时间");}public void run(){while(true){SimpleDateFormat df=new SimpleDateFormat("HH:mm:ss");time= df.format(new Date());//System.out.println(time);conver.showtime.setText(time);try{this.sleep(1000);}catch(Exception e){System.out.println(e.getMessage());}}}public static void main(String []args){}}单聊package LiaoTianSys;import java.io.DataOutputStream;import java.io.IOException;import .*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Danliao extends JFrame implements ActionListener{ JButton jb=new JButton("发送");JPanel jp1=new JPanel();JLabel jl=new JLabel("输入聊天信息");JTextField jtf=new JTextField(20);JTextArea jta=new JTextArea();JScrollPane jsp=new JScrollPane(jta);String recevier;String sender;Socket socket;public Danliao(String sender,String recevier,Socket socket) { this.recevier=recevier;this.sender=sender;this.socket=socket;setBackground(Color.red);setTitle("与"+recevier+"单聊");setSize(400,400);setLocation(200,200);Container con=getContentPane();con.setLayout(new BorderLayout());con.add(jsp,BorderLayout.CENTER);jp1.add(jl);jp1.add(jtf);jp1.add(jb);/*addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){//System.exit(0);//this.dispose();//this.hide();this.setVisible(false);}});*/addWindowListener(new Close(this));con.add(jp1,BorderLayout.SOUTH);jb.addActionListener(this);setVisible(true);}public void actionPerformed(ActionEvent e){ String msg=jtf.getText();jta.append(msg+"\n"+"\n");jtf.setText(null);try{DataOutputStream dos=new DataOutputStream(socket.getOutputStream());dos.writeUTF("private"+sender+"悄悄的对"+recevier+"说: "+msg);jtf.setText(null);}catch(Exception e1){e1.printStackTrace();}}public static void main(String[] args){}}//单击关闭窗口事件,隐藏单聊窗口class Close extends WindowAdapter{Danliao danliao;public Close(Danliao danliao){this.danliao=danliao;}public void windowClosing(WindowEvent e) {danliao.setVisible(false);}}。

用javaWebSocket做一个聊天室

用javaWebSocket做一个聊天室

⽤javaWebSocket做⼀个聊天室最近⼀个项⽬中,需要⽤到Java的websocket新特性,于是就学了⼀下,感觉这技术还挺好玩的,瞬间知道⽹页上⾯的那些在线客服是怎么做的了。

先看图:实现了多客户机进⾏实时通讯。

下⾯看代码项⽬结构图:很简单,就1个类,1个页⾯然后看具体代码先看后端代码package com.main;import java.io.IOException;import java.util.concurrent.CopyOnWriteArraySet;import javax.websocket.*;import javax.websocket.server.ServerEndpoint;/*** @ServerEndpoint 注解是⼀个类层次的注解,它的功能主要是将⽬前的类定义成⼀个websocket服务器端,* 注解的值将被⽤于监听⽤户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端*/@ServerEndpoint("/websocket")public class H5ServletServerSocket {// 静态变量,⽤来记录当前在线连接数。

应该把它设计成线程安全的。

private static int onlineCount = 0;// concurrent包的线程安全Set,⽤来存放每个客户端对应的MyWebSocket对象。

若要实现服务端与单⼀客户端通信的话,可以使⽤Map来存放,其中Key可以为⽤户标识 private static CopyOnWriteArraySet<H5ServletServerSocket> webSocketSet = new CopyOnWriteArraySet<H5ServletServerSocket>();// 与某个客户端的连接会话,需要通过它来给客户端发送数据private Session session;/*** 连接建⽴成功调⽤的⽅法** @param session* 可选的参数。

基于JAVA局域网聊天程序设计与实现(附源代码)

基于JAVA局域网聊天程序设计与实现(附源代码)

局域网聊天课程设计摘要随着互联网的发展,网络聊天工具作为一种交流工具,已经受到网民的青睐。

目前,出现了很多功能强大的聊天工具,其中应用比较广泛的有腾讯QQ、MSN-Messager等等。

即时通讯软件,是每一个上网用户都需要的工具,它除了能够让您迅速地在网上找到自己的朋友和伙伴之外,还可以实时交谈和传递信息,截止到目前,全球约有近3亿多人使用即时软件,正因为即时通讯软件拥有数以亿计的用户和增长的市场,所以各个公司都盯上了这个最大的市场,一时间,即时通讯市场硝烟四起。

对等网络(peer-to-peer,简称P2P),应用最初出现时和现在并不相同。

事实上可以认为它是若干不同技术以及流行趋势相结合的产物。

以下是导致P2P技术发展最重要的趋势:首先,一些新技术与软件工程的结合,形成了一种将工作分散的趋势。

P2P计算正是这种分散工作趋势的结果。

其次,在企业应用集成等因素的驱动下,过去十年渐渐形成从集中的单机系统转向分布式系统。

然而随着互联网的发展,全面的分布式计算也就成为一种迫切需求。

关键词:局域网聊天 P2P javaAbstractWith the development of the Internet,the chat tool as a communication tool, has been popularly accepted by netizens of all ages. At present, there are many powerful chat tools, of which Tencent QQ, MSN-Messager are much more prevalent.Instant messaging software is necessary for every one who connects to the internet, which can not only provide you a prompt way to find friends and partners online, but can provide you the convenience of internet relay chat and information delivering. Up to now, there are about 300 million people using real-time software all over the world. As more and more corporations have focused on this market with growing potential, which has hundreds of millions of uses, the competitions among these corporations are extremely fierce.The initial application of peer-to-peer network (peer-to-peer, referred to as P2P) is not the same as it is now. In fact, it can be regarded as a combination of different technologies and fashion trends. Below are the most important trends that have led the development of P2P technology: First of all, the integration of software engineering and new technologies led to a working dispersion trend. As a result, P2P computing was born. Then, in the past decade, it has turned fro m a single centralized system to distributed system due to the motivation of factors such as enterprise application integration. At last, with the development of the Internet, however, a comprehensive distributed computing has become an urgent need.Keywords:LAN chat P2P java局域网聊天课程设计目录摘要 (i)Abstract ..................................................................................................................................... i i 1绪论 . (1)1.1JAVA的网络功能与编程 (1)1.1.1JAVA概述 (1)1.1.2 JAVA的特点 (3)1.1.3 JAVA语言在网络上的应用 (5)1.2J AVA B EANS技术 (6)1.3IP/TCP协议常识 (6)1.4S OCKET的简介 (7)1.5对等网络 (8)1.5.1 对等网络发展历史 (8)1.5.2 对等网络的概念 (9)1.5.3 对等网络的主要系统结构 (9)2 JAVAqq局域网聊天程序的需求分析 (13)2.1课题来源 (13)2.2需求分析 (13)3 JAVAqq局域网聊天程序的系统分析与设计 (15)3.1JAVA QQ局域网聊天程序的总体设计要点 (15)3.2JAVA QQ局域网聊天程序的设计步骤及功能模块划分 (15)3.3JAVA QQ局域网聊天程序各功能模块 (16)4 JAVAqq局域网聊天程序的设计与实现 (24)4.1开发环境工具 (24)4.2硬件环境 (24)4.3聊天系统功能模块的测试 (24)结论 (27)致谢 (29)参考文献 (30)附录 A 程序源代码 (31)1绪论随着互联网逐步普及,互联网技术的逐步提高。

javaweb实现简单聊天室

javaweb实现简单聊天室

javaweb实现简单聊天室⽬标servlet、jsp实现简单聊天室,⽤户通过浏览器登录后进⼊聊天室,可发送消息进⾏群聊,点击聊天信息框中的⽤户名可实现拍⼀拍功能。

基础知识数据的存取 setAttribute / getAttributerequest请求对象:有效时间短ServletContext上下⽂对象:⼀直存在于服务器,存储公有、共享数据Session会话对象:独⽴⽹站默认页⾯⼀般是index.jsp实现思路1.登录页⾯ login.jsp 输⼊昵称2.编写⼀个LoginSevlet,处理登录提交的昵称,保存登录昵称到session(会话变量)若昵称合法 if(nickname.length()!=0),跳转到聊天室,不合法回到登录页⾯3.编写聊天室页⾯chatroom.jsp ,是⼀个框架,把多个页⾯集成到⼀个页⾯中<iframe src="message.jsp" width="100%" height="70%"> </iframe><iframe src="input.jsp" width="100%" height="25%"> </iframe>4.聊天内容显⽰message.jsp,不断⾃动刷新标签内设置响应头,⽤${上下⽂变量}显⽰聊天内容<meta http-equiv="refresh" content="1">5.input.jsp(不刷新)输⼊聊天内容⽂本框text,点击发送聊天内容按钮时,将把⽂本框的聊天信息提交给ChatServlet处理。

下⽅有超链接可退出聊天室。

<a href="login.jsp" target="_top">退出聊天室</a>6.ChatServlet:检测聊天信息合法性,把聊天信息加⼊到ServletContext变量(字符串)中,(每次都将xx:xxxx加⼊上下⽂字符串)判断是否存在该变量,存在则直接读取现有聊天内容,把数据加⼊进去后,重新写回上下⽂变量7.实现拍⼀拍功能(⽬的:学习如何进⾏链接操作)每个⼈名做成⼀个链接,访问某⼀个servlet,该servlet可以在聊天信息(上下⽂变量)⾥添加⼀⾏,xx拍了yyy⼀下,跳转回message.jsp问题:链接⾥应该包含yyy参数,servlet?nick=yyysay = "<a href='NickServlet?nickname="+nickname+"'target='_parent'>"+nickname+"</a>"+":"+text;8.多⼈聊天实现:多种类型浏览器关键代码login.jsp昵称:<input type="text" name="nickname"/><br> <br><br><input type="submit" value="登录"/><input type="reset" value="取消"/>input.jsp<form action="input.do" method="post"><input type="text" size="50" name="text"/><input type="submit" value="发送"><br><br><br><br><a href="login.jsp" rel="external nofollow" rel="external nofollow" target="_top">退出聊天室</a></form>message.jsp<h3>⼀起来聊天吧</h3>${says}LoginServlet.javapackage chatting;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;import java.io.PrintWriter;@WebServlet(name = "LoginServlet2",urlPatterns = {"/login.do"})public class LoginServlet2 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //避免乱码response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("utf-8");//nickname保存⽤户昵称String nickname = request.getParameter("nickname");//nickname存储到session变量中HttpSession session = request.getSession();session.setAttribute("nickname",nickname);//对nickname进⾏合法性判断if(nickname.length()!=0){//昵称合法,则进⼊聊天室页⾯request.getRequestDispatcher("/chatroom.jsp").forward(request,response);}else{//昵称不合法,返回登陆页⾯request.getRequestDispatcher("/login.jsp").forward(request,response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }}ChatServlet.javapackage chatting;import javax.servlet.RequestDispatcher;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;import java.util.Vector;@WebServlet(name = "ChatServlet",urlPatterns = "/input.do")public class ChatServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //防⽌乱码request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");HttpSession session = request.getSession();String text = request.getParameter("text");//text存储聊天信息,并进⾏合法性判断if (text.length()!=0) {String say =new String();//获取session中的昵称String nickname = (String)session.getAttribute("nickname");//将昵称作为链接,并传参say = "<a href='NickServlet?nickname="+nickname+"'target='_parent'>"+nickname+"</a>"+":"+text;String says = new String();//将昵称和聊天信息⼀起放在上下⽂变量ServletContext context = getServletContext();if(context.getAttribute("says")!=null){says = context.getAttribute("says") + say + "<br>";}else{says = say + "<br>";}context.setAttribute("says", says);request.setAttribute("says", says);}//转发RequestDispatcher dispatcher = request.getRequestDispatcher("/input.jsp");dispatcher.forward(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }}NickServlet.javapackage chatting;import javax.servlet.RequestDispatcher;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;import java.io.PrintWriter;@WebServlet(name = "NickServlet",urlPatterns = "/NickServlet")public class NickServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8");request.setCharacterEncoding("utf-8");//将拍⼀拍放到上下⽂变量says中⼀起输出HttpSession session = request.getSession();//nickname存储当前⽤户昵称String nickname = (String)session.getAttribute("nickname");//name存储连接中传递的参数,即被拍的⽤户昵称String name = .URLDecoder.decode(request.getParameter("nickname"),"UTF-8");String pick = nickname+"拍了拍"+name+"<br>";ServletContext context = request.getServletContext();String says = context.getAttribute("says")+pick;context.setAttribute("says",says);RequestDispatcher dispatcher = request.getRequestDispatcher("/chatroom.jsp");dispatcher.forward(request, response);}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

JAVA写一网络聊天程序

JAVA写一网络聊天程序

JAVA写一网络聊天程序JAVA写一网络聊天程序:要求:聊天室服务器、聊天室客户端;客户端之间可以聊天。

因为我是初级选手,想借此程序分析学习java,所以代码最好多一点注释...分数有限,望大家不吝赐教!!问题补充:需要图形用户界面哦,最好用swing组件服务器端:采用多线程,可以向客户广播:当前聊天室人数,客户名称列表,客户进入离开提示;客户端:可以设定昵称,性别,客户间可以私聊服务器端:import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;import .*;public class Server extends JFrame implements ActionListener{JPanel contentPane;JLabel jLabel2 = new JLabel();JTextField jTextField2 = new JTextField(&quot;4700&quot;);JButton jButton1 = new JButton();JLabel jLabel3 = new JLabel();JTextField jTextField3 = new JTextField();JButton jButton2 = new JButton();JScrollPane jScrollPane1 = new JScrollPane();JTextArea jTextArea1 = new JTextArea();ServerSocket server = null;Socket socket = null;BufferedReader instr =null;PrintWriter os=null ;//Construct the framepublic Server() {jbInit();}class MyThread extends Thread{//该线程负责接受数据public void run(){try{while(true){this.sleep(100);instr= new BufferedReader(newInputStreamReader(socket.getInputStream()));if(instr.ready()){ //检查是否有数据jTextArea1.append(&quot;客户端: &quot;+instr.readLine()+&quot;\n&quot;);}}}catch(Exception ex){}}}public void actionPerformed(ActionEvent e){if(e.getSource()==jButton1){int port=Integer.parseInt(jTextField2.getText().trim());listenClient(port);}if(e.getSource()==jButton2){String s=this.jTextField3.getText().trim();sendData(s);}}private void listenClient(int port){//侦听try{if(jButton1.getText().trim().equals(&quot;侦听&quot;)){server = new ServerSocket(port);jButton1.setText(&quot;正在侦听...&quot;);socket=server.accept();//等待,一直到客户端连接才望下执行sendData(&quot;已经成功连接。

JAVA局域网聊天软件设计

JAVA局域网聊天软件设计

JAVA局域网聊天软件设计局域网聊天软件是一种在局域网内进行实时通信的应用程序。

它允许局域网中的用户通过文本、图片、音频和视频等多种方式进行交流。

在设计JAVA局域网聊天软件时,需要考虑到以下几个方面:1. 网络通信:软件需要通过网络实现用户之间的通信。

可以使用Socket套接字实现网络通信,通过TCP/IP协议来传输数据。

同时,为了提高效率,可以使用多线程来处理客户端的请求和消息的传输。

2.用户注册和登录:软件应该提供用户注册和登录的功能。

用户需要提供用户名和密码进行注册,并使用已注册的账号进行登录。

为了保护用户隐私和安全,密码应该进行加密存储,并进行合适的验证和授权。

3.用户列表和好友关系:软件应该提供用户列表,显示当前在线的用户。

用户可以添加好友并建立好友关系。

在用户列表中显示用户的在线状态和好友关系。

4.聊天功能:软件应该提供实时聊天的功能。

用户可以选择一些好友进行聊天,并发送文本、图片、音频和视频等内容。

软件需要实现消息的接收和发送,同时提供聊天记录的保存和查看功能。

5.群聊功能:软件还应该提供群聊的功能。

用户可以创建群聊并邀请好友进行加入。

在群聊中,用户可以发送消息和接收消息,实现实时的群组通信。

6.图形界面设计:为了提供良好的用户体验,软件应该设计友好的图形界面。

界面应该清晰明了,功能模块布局合理,且具有一定的美观性。

用户可以通过图形界面进行注册、登录、选择好友、发送消息等操作。

7.安全性和可靠性:在设计过程中需要考虑数据的安全性和软件的可靠性。

可以采用加密算法对数据进行加密,进行合适的输入验证和异常处理。

同时,应该进行充分的测试和调试,确保软件的稳定性和可靠性。

总结起来,设计JAVA局域网聊天软件需要考虑网络通信、用户注册和登录、用户列表和好友关系、聊天和群聊功能、图形界面设计以及安全性和可靠性等方面。

通过合理的软件架构和技术实现,可以开发出功能完善、稳定可靠的局域网聊天软件。

Java基于UDP协议实现简单的聊天室程序

Java基于UDP协议实现简单的聊天室程序最近⽐较闲,⼀直在抽空回顾⼀些Java⽅⾯的技术应⽤。

今天没什么事做,基于UDP协议,写了⼀个⾮常简单的聊天室程序。

现在的⼯作,很少⽤到socket,也算是对Java⽹络编程⽅⾯的⼀个简单回忆。

先看⼀下效果:实现的效果可以说是⾮常⾮常简单,但还是可以简单的看到⼀个实现原理。

“聊天室001”的⽤户,⼩红和⼩绿相互聊了两句,“聊天室002”的⼩⿊⽆⼈理会,在⼀旁寂寞着。

看⼀下代码实现:1、⾸先是消息服务器的实现,功能很简单:•将客户端的信息(进⼊了哪⼀个聊天室等)进⾏登记;•构造UDP协议套接字对象,接受各个客户端发送的消息;•解析消息内容,将聊天信息推送回对应聊天室的各个客户端;package com.tsr.simplechat.receive_server;import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .SocketException;import java.util.ArrayList;import java.util.HashMap;import com.google.gson.Gson;import com.tsr.simplechat.bean.MessageEntity;import com.tsr.simplechat.client.ChatClient;//聊天服务器public class ChatServer extends Thread {// 程序占⽤端⼝号private static final int PORT = 10000;// 消息接受套接字对象private static DatagramSocket server = null;// 字典对象(Key:聊天室ID,Value:该聊天室下的客户端⽤户集合);private static HashMap<String, ArrayList<ChatClient>> groups = new HashMap<String, ArrayList<ChatClient>>();// 构造器public ChatServer() {try {// 消息接受套接字对象的构造初始化server = new DatagramSocket(PORT);} catch (SocketException e) {e.printStackTrace();}}// 注册聊天室新登录⽤户public static void logInGroup(String groupID, ChatClient client) {// 通过聊天室ID,获取该聊天室的所有在线⽤户ArrayList<ChatClient> clients = groups.get(groupID);if (clients == null) {clients = new ArrayList<ChatClient>();}// 将此次进⼊聊天室的⽤户登记clients.add(client);// 更新聊天室信息groups.put(groupID, clients);}// 循环接收消息@Overridepublic void run() {while (true) {receiveMessage();}}private void receiveMessage() {// UDP数据包byte[] buf = new byte[1024];DatagramPacket packet = new DatagramPacket(buf, buf.length);while (true) {try {// 接受数据包server.receive(packet);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 解析数据包,获取聊天信息String content = new String(packet.getData(), 0, packet.getLength()); // 通过第三⽅包解析json数据Gson gson = new Gson();MessageEntity me = gson.fromJson(content, MessageEntity.class); // 解析消息内容,通过聊天室ID,获取该聊天室的所有在线⽤户ArrayList<ChatClient> clients = groups.get(me.getGroupId());// 将接收到的消息推送回该聊天室的各个⽤户for (ChatClient client : clients) {client.pushBackMessage(me);}}}}2、客户端程序,依然很简单:•简单的定义客户端聊天室界⾯。

JAVA WEB制作简易聊天室2

1.登陆界面<%@ page language="java" pageEncoding="gb2312"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>用户登陆</title></head><body><form action="chart.jsp" method="post">帐号<input type="text" name="userName"/>口令<input type="password" name="passwd"/><input type="submit" value="确认"/></form></body></html>2.<%@ page contentType="text/html; charset=gb2312" import="erId,java.util.*"%><%String path = request.getContextPath();String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerP ort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>My JSP 'chart.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><%response.setIntHeader("Refresh",10); %></head><body><%/**程序目的:模拟一个聊天室程序测试方法,请在本机上打开3个IE窗口,从登陆界面进去。

基于java的局域网聊天系统(可编辑)

基于Java的局域网聊天系统引论交流对于现代社会及其每个社会的成员都非常重要。

直接交流的方式有许多,包括语言交流、书面文字交流、肢体动作交流等,而远程通讯交流则还需借助于一些先进的高级工具,诸如移动电话、固定电话、网络等。

而本篇论文研究的则是网络即时通讯系统。

计算机网络技术发展到今天,已经非常的发达非常的普及了,网络带给人们的通讯交流方式也更加受到各个层次人们的青睐。

功能齐全的网络通讯交流设备不仅可以实现文本传输而且可以使人们进行音频视频的直观交流,在利用现代多媒体的技术的同时,它还有助于使用者对工作中各种信息进行分类和处理。

大家都知道,QQ是目前国内最火爆的网络通讯设备。

QQ最大的特点就是方便即时,只要记得对方的QQ号码,添加他为好友,就可以随时随地实现聊天、沟通、视频远程操作协助语音通话等功能,是比较现代化的通讯技术之一。

在现代信息科学技术社会,通讯系统推陈出新,功能强大。

该论文现在要探讨的即时通讯系统,是目标定位到企业内部网络,以方便解决企业公司内部的沟通交流等问题,可以大大提高企业公司的工作效率。

该通讯设备方便内部员工进行沟通交流,例如文字传送,语音聊天,视频通话等等。

该即时通讯系统由客户端程序与服务器端程序两部分组成,支持局域网和以太网。

而这样企业员工就可以在任何有网络覆盖的地方进行随时进行意见的交流和文件的传送等。

使人们不用浪费时间,花费金钱在固定的地点交流。

QQ等工具公共通讯系统,因为具有聊天内容和对象不可控的特点,可能会减低员工的工作效率。

由于该即时通讯系统用于企业内部,因此服务器端也安装在企业内部,并且只有系统管理员才能进行人员名称数目的创建,这样就助于更好的解决公共通讯系统存在的问题。

即时通讯具有良好的互动性,互动性可体现在人们在交流不同的问题意见时,发现听取对方的建议是效果更好。

通过使用及时通讯系统,人们可以在网络覆盖的地方和有电脑的情况下不借助其他外在设备,在线工作交流。

java实现简易局域网聊天功能代码介绍

java实现简易局域网聊天功能代码介绍局域网通常是分布在一个有限地理范围内的网络系统,一般所涉及的地理范围只有几公里。

局域网专用性非常强,具有比较稳定和规范的拓扑结构。

这篇文章主要为大家详细介绍了java实现简易局域网聊天功能,使用UDP模式编写一个聊天程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下Java代码:/某使用UDP模式,编写一个聊天程序有发送和接收数据2部分,一个线程接收,一个线程发送由于发送和接收动作是不一致的,所以要使用2个run方法而且这两个方法要封装到不同的类中本程序忽略了部分异常的处理,也未加入UI组件这样比较简洁发送端口9998接受端口9999用的是局域网广播地址,所以自己发的消息自己也收到了[示例]:简易控制台聊天程序某/import .某;import java.io.某;class Demo{public static void main(String[] args) throws E某ception{DatagramSocket sendSocket = new DatagramSocket(9998); //发送端DatagramSocket receSocket = new DatagramSocket(9999); //接收端new Thread(new MsgSend(sendSocket)).start(); //发送线程 new Thread(new MsgRece(receSocket)).start(); //接受线程 }}class MsgSend implements Runnable //发送{private DatagramSocket dsock;public MsgSend(DatagramSocket dsock){this.dsock= dsock;}public void run(){BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));String lineStr = null;try{while(true){lineStr = bufr.readLine();if(lineStr!=null){if(lineStr.equals("over886")){break;}else{byte[] dataBuf = lineStr.getBytes();DatagramPacket dataPack = //数据打包new DatagramPacket( dataBuf,dataBuf.length,InetAddress.getByName("192.168.1.255"), //广播 9999 //目标端口);dsock.send(dataPack);}}}bufr.close();dsock.close();}catch(E某ception e){throw new RuntimeE某ception("发送失败!"); }}}class MsgRece implements Runnable //接收{private DatagramSocket dsock;public MsgRece(DatagramSocket dsock){this.dsock= dsock;}public void run(){try{while(true){byte[] dataBuf = new byte[1024];DatagramPacket dataPack = newDatagramPacket(dataBuf,dataBuf.length);dsock.receive(dataPack); //将获取的数据保存到指定的数据包 String ip = dataPack.getAddress().getHostAddress();String data = newString(dataPack.getData(),0,dataPack.getLength());int port = dataPack.getPort();System.out.println();System.out.println("来自ip为 "+ip+" : "+port+" 的消息"); System.out.println(data);}}catch(E某ception e){throw new RuntimeE某ception("接受失败!");}finally{dsock.close();}}}补充:局域网、校园网安全维护方法校园网络分为内网和外网,就是说他们可以上学校的内网也可以同时上互联网,大学的学生平时要玩游戏购物,学校本身有自己的服务器需要维护;在大环境下,首先在校园网之间及其互联网接入处,需要设置防火墙设备,防止外部攻击,并且要经常更新抵御外来攻击;由于要保护校园网所有用户的安全,我们要安全加固,除了防火墙还要增加如ips,ids等防病毒入侵检测设备对外部数据进行分析检测,确保校园网的安全;外面做好防护措施,内部同样要做好防护措施,因为有的学生电脑可能带回家或者在外面感染,所以内部核心交换机上要设置vlan隔离,旁挂安全设备对端口进行检测防护;内网可能有ddos攻击或者arp病毒等传播,所以我们要对服务器或者电脑安装杀毒软件,特别是学校服务器系统等,安全正版安全软件,保护重要电脑的安全;对服务器本身我们要安全server版系统,经常修复漏洞及更新安全软件,普通电脑一般都是拨号上网,如果有异常上层设备监测一般不影响其他电脑。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档