基本信息
源码名称:java实现的P2P即时聊天程序(源码+文档+jar运行包)
源码大小:0.45M
文件格式:.zip
开发语言:Java
更新时间:2019-06-29
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
一个简单的P2P即时聊天系统,实现功能如下: 1) 点对点的单人聊天 2) 多人同时聊天 3) 用户可以自由加入和退出
一个简单的P2P即时聊天系统,实现功能如下: 1) 点对点的单人聊天 2) 多人同时聊天 3) 用户可以自由加入和退出
服务端如下:
客户端聊天记录为:
package netchat; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.text.SimpleDateFormat; //import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.io.*; import java.net.*; import netchat.clientInfo; public class Server extends JFrame implements ActionListener{ JButton sendButton,cleanButton,closeButton,startButton; TextArea taRecord,taInput; TextField textfield; List list; clientInfo clientinfo; ServerSocket serversocket; Socket socket; //ServerListenThread serverlistenthread; ObjectOutputStream out; ObjectInputStream in; ArrayList<ObjectOutputStream> allOut; static InetAddress ip; static int port; static boolean isStop; SimpleDateFormat date=new SimpleDateFormat("yyyy-MM-dd hh:mm EEEE"); Date time=new Date(); static Server server; public static void main(String[] args) { server=new Server(); } public Server() { //初始化allOuts this.allOut = new ArrayList<ObjectOutputStream>(); sendButton=new JButton("发送"); sendButton.setMnemonic('S'); cleanButton=new JButton("清除"); closeButton=new JButton("关闭"); startButton=new JButton("启动"); closeButton.setEnabled(false); sendButton.setEnabled(false); cleanButton.setEnabled(false); taRecord=new TextArea("",14,50); taRecord.setBackground(Color.lightGray); taInput=new TextArea("",4,50); taInput.setBackground(Color.lightGray); textfield=new TextField(); textfield.setBackground(Color.lightGray); taRecord.setEditable(false); //list.setEnabled(false); textfield.setEditable(false); //DefaultListModel model=new DefaultListModel(); list=new List(); Panel p1=new Panel(); p1.setLayout(new BorderLayout()); p1.add(new Label("在线列表"),BorderLayout.NORTH); p1.add(textfield,BorderLayout.CENTER); Panel p2=new Panel(); p2.setLayout(new BorderLayout()); p2.add(p1,BorderLayout.NORTH); p2.add(list,BorderLayout.CENTER); Panel p3=new Panel(); p3.setLayout(new GridLayout(1,2,90,4)); p3.add(startButton); p3.add(closeButton); Panel p4=new Panel(); p4.setLayout(new BorderLayout()); p4.add(new Label("聊天记录"),BorderLayout.NORTH); p4.add(taRecord,BorderLayout.CENTER); Panel p9=new Panel(); p9.setLayout(new BorderLayout()); p9.add(p3,BorderLayout.NORTH); p9.add(p4,BorderLayout.CENTER); Panel p5=new Panel(); p5.setLayout(new BorderLayout(5,9)); p5.add(p9,BorderLayout.CENTER); p5.add(taInput,BorderLayout.SOUTH); Panel p6=new Panel(); p6.setLayout(new GridLayout(1,2,90,50)); p6.add(sendButton); p6.add(cleanButton); Panel p7=new Panel(); p7.setLayout(new BorderLayout()); p7.add(p5,BorderLayout.CENTER); p7.add(p6,BorderLayout.SOUTH); Panel p8=new Panel(); p8.setLayout(new BorderLayout()); p8.add(p2,BorderLayout.WEST); p8.add(p7,BorderLayout.CENTER); setLayout(new BorderLayout()); add(p8,BorderLayout.CENTER); setSize(450,450); setTitle("chatRoom"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); setVisible(true); sendButton.addActionListener(this); cleanButton.addActionListener(this); closeButton.addActionListener(this); startButton.addActionListener(this); } public void actionPerformed(ActionEvent e) { if(e.getSource()==startButton) { startServer(); } else if(e.getSource()==closeButton) { stopServer(); System.exit(0); } else if(e.getSource()==sendButton) { if(taInput.getText().equalsIgnoreCase("")||taInput.getText()==null) { JOptionPane.showMessageDialog(this, "尚未输入系统信息!","Information" , JOptionPane.INFORMATION_MESSAGE); } sendSystemMessage(); } else if(e.getSource()==cleanButton) { taInput.setText(""); } } public void startServer() { try { serversocket=new ServerSocket(1234); taRecord.append("等待连线....." "\n"); startButton.setEnabled(false); closeButton.setEnabled(true); sendButton.setEnabled(true); cleanButton.setEnabled(true); this.isStop=false; clientinfo=new clientInfo(); ServerListenThread serverlistenthread=new ServerListenThread(serversocket,taRecord,textfield,list,clientinfo); serverlistenthread.start(); } catch(Exception e) { taRecord.append("error0"); } } public void stopServer() { try { this.isStop=true; serversocket.close(); socket.close(); list.removeAll(); } catch(Exception e) { taRecord.append("close"); } } public void sendSystemMessage() { String message=taInput.getText(); taRecord.append("系统消息 " taInput.getText() "\n"); taInput.setText(""); try { Iterator<ObjectOutputStream> it = this.allOut.iterator(); while(it.hasNext()){ ObjectOutputStream tout = it.next(); tout.writeObject("系统消息"); tout.flush(); tout.writeObject(message); tout.flush(); } } catch(Exception e) { taRecord.append("error92" e.toString()); } } public class ServerListenThread extends Thread{ ServerSocket serversocket; TextArea taRecord; List list; TextField textfield; clientInfo clientinfo; Node node; //Socket socket; //ObjectOutputStream out; //ObjectInputStream in; ServerReceiveThread serverreceivethread; public ServerListenThread(ServerSocket serversocket,TextArea taRecord,TextField textfield,List list,clientInfo clientinfo) { this.serversocket=serversocket; this.taRecord=taRecord; this.textfield=textfield; this.list=list; this.clientinfo=clientinfo; } public void run() { while(!isStop&&!serversocket.isClosed()) { try { node=new Node(); socket=serversocket.accept(); InetAddress ip=socket.getInetAddress().getByName(socket.getInetAddress().getHostAddress()); server.setIp(ip); node.ip=ip; ObjectOutputStream out=new ObjectOutputStream(socket.getOutputStream()); allOut.add(out); in=new ObjectInputStream(socket.getInputStream()); node.username=(String)in.readObject(); node.port = in.readInt(); taRecord.append("恭喜你!" node.username "连线成功!" " " "the client " node.username "'s address is " ip ":" node.port "\n"); list.add(node.username); clientinfo.add(node); taRecord.append("用户" node.username "已上线\n"); String message="在线用户" clientinfo.getCount() "人\n"; textfield.setText(message); server.setOut(out); serverreceivethread=new ServerReceiveThread(socket,taRecord,textfield,list,node,clientinfo,in,out,Server.this.allOut,message); serverreceivethread.start(); } catch(Exception e) { taRecord.append("error85" e.toString()); } } } } public void setOut(ObjectOutputStream out) { this.out=out; } public ObjectOutputStream getOut() { return out; } public void setIp(InetAddress ip) { this.ip=ip; } public InetAddress getIp() { return ip; } public void setPort(int port) { this.port=port; } public int getPort() { return port; } }