java聊天程序源代码.docx

上传人:小飞机 文档编号:3159687 上传时间:2023-03-11 格式:DOCX 页数:22 大小:42.85KB
返回 下载 相关 举报
java聊天程序源代码.docx_第1页
第1页 / 共22页
java聊天程序源代码.docx_第2页
第2页 / 共22页
java聊天程序源代码.docx_第3页
第3页 / 共22页
java聊天程序源代码.docx_第4页
第4页 / 共22页
java聊天程序源代码.docx_第5页
第5页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《java聊天程序源代码.docx》由会员分享,可在线阅读,更多相关《java聊天程序源代码.docx(22页珍藏版)》请在三一办公上搜索。

1、java聊天程序源代码java聊天程序源代码 服务端: import java.io.*; import .*; import java.util.*; public class ChatServer boolean stat = false; ServerSocket ss = null; List clients = new ArrayList;/用于存客户端 public static void main(String args) new ChatServer.start; public void start try ss = new ServerSocket(8888); stat =

2、 true; catch(BindException e) /Sever端已经运行,当重复运行时抛异常 System.out.println(端口正在使用中。); System.out.println(请关掉相关程序并重新运行服务器!); /还会抛别的异常,所以直接关闭窗口 System.exit(0); catch(IOException e) e.printStackTrace; try while(stat) Socket s = ss.accept; System.out.println(a client connected! ); /测试语句写在最左边,以后没用可以删除或注掉 Cli

3、ent c = new Client(s); /每建立一个客户端,就new一个客户端对象,启动一个线程 new Thread(c).start; clients.add(c); /勿忘写,将每个客户端加入到容器里 catch (IOException e) e.printStackTrace; finally try ss.close; catch (IOException e) e.printStackTrace; class Client implements Runnable private Socket s; private DataInputStream dis; private D

4、ataOutputStream dos; private boolean cont = false; public Client(Socket s) this.s = s; try dis = new DataInputStream(s.getInputStream);/初始化 dos = new DataOutputStream(s.getOutputStream); cont = true; catch (IOException e) e.printStackTrace; public void send(String str) /用于发送给客户端 try dos.writeUTF(str

5、); catch (IOException e) clients.remove(this); /移除那个退出的对象 System.out.println(一个客户退出了); /e.printStackTrace; public void run try while(cont) String str = dis.readUTF; /阻塞式方法 System.out.println(str); for(int i=0; iclients.size; i+) Client c = clients.get(i); /取客户端 c.send(str); /* 另外两种方法,但不适用,它会锁定服务端 fo

6、r(Iterator it = clients.iterator; it.hasNext;) Client c = it.next; c.send(str); Iterator it = clients.iterator; while(it.hasNext) Client c = it.next; c.send(str); */ catch (EOFException e) /readUTF阻塞式方法,所以关闭客户端会抛异常 System.out.println(Client closed!); catch (IOException e) e.printStackTrace; finally

7、try if(dis != null) dis.close; if(dos != null) dos.close; if(s != null) s.close; s = null;/更严格的方法,等于空就没人去用了,垃圾收集器就回收走 catch (IOException e) e.printStackTrace; 客户端: import java.awt.*; import java.awt.event.*; import java.io.*; import .*; public class ChatClient extends Frame Socket s = null; DataOutp

8、utStream dos = null; DataInputStream dis = null; private boolean cont = false; TextField tfTxt = new TextField; TextArea taContent = new TextArea; Thread tRecv = new Thread(new RecvThread); public static void main(String args) new ChatClient.launchFrame; public void launchFrame setLocation(400, 300)

9、; this.setSize(300, 300); add(tfTxt,BorderLayout.SOUTH); add(taContent,BorderLayout.NORTH); pack; /包在一起,去掉中间空着的 this.addWindowListener(new WindowAdapter public void windowClosing(WindowEvent e) disconnect; System.exit(0); ); tfTxt.addActionListener(new TfListent); setVisible(true); connect; tRecv.st

10、art; /启动线程 public void connect try s = new Socket(127.0.0.1,8888);/注意不要定义成Socket s,这就成了局部变量而不是成员变量了 System.out.println(connected!); dos = new DataOutputStream(s.getOutputStream); dis = new DataInputStream(s.getInputStream); cont = true; catch (UnknownHostException e) e.printStackTrace; catch (IOExce

11、ption e) e.printStackTrace; public void disconnect try dos.close; dis.close; s.close; catch (IOException e) e.printStackTrace; /*/无法解决readUTF阻塞式方法 try cont = false; /关闭线程 tRecv.join; /合并线程,彻底让他停止 catch (InterruptedException e) e.printStackTrace; finally try dos.close; /线程停止之后才能关流,不然抛SocketException异

12、常 dis.close; s.close; catch (IOException e) e.printStackTrace; */ private class TfListent implements ActionListener public void actionPerformed(ActionEvent e) String str = tfTxt.getText.trim; tfTxt.setText(); try dos.writeUTF(str); dos.flush; catch (IOException e1) e1.printStackTrace; private class

13、RecvThread implements Runnable public void run try while(cont) String str = dis.readUTF; taContent.setText(taContent.getText + str + n); catch (SocketException e) System.out.println(退出了,bye!); catch (IOException e) e.printStackTrace; 简单的聊天程序,主要用到的是Socket,线程以及流 如果没看懂可以去下载 尚学堂科技_马士兵_在线聊天系统雏形视频教程_java_

14、eclipse.rar 1.客户端 package com.client; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import .Socket; import .UnknownHostException; import java.text.DateF

15、ormat; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import com.ui.ChatUI; public class Client extends ChatUI implements ActionListener private String content = ; Socket socket; DateFormat df = new SimpleDa

16、teFormat(yyyy-MM-dd HH:mm:ss); public static int i; public Client super(客户端:); getSendBtn.addActionListener(this); getCancelBtn.addActionListener(this); try +i; socket = new Socket(localhost, 1234); catch (UnknownHostException e) e.printStackTrace; catch (IOException e) e.printStackTrace; public voi

17、d actionPerformed(ActionEvent e) if (e.getActionCommand.equals(Send) String msg = getMsgText.getText; String s = : + df.format(new Date) + n + msg; content = content + s + n; getContentText.setText(content.trim); getMsgText.setText(); try PrintStream ps = new PrintStream(socket.getOutputStream); ps.

18、println(msg); catch (UnknownHostException e1) e1.printStackTrace; catch (IOException e1) e1.printStackTrace; else if (e.getActionCommand.equals(Cancel) System.exit(0); public static void main(String args) try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName); catch (ClassNotFoundExce

19、ption e) e.printStackTrace; catch (InstantiationException e) e.printStackTrace; catch (IllegalAccessException e) e.printStackTrace; catch (UnsupportedLookAndFeelException e) e.printStackTrace; Client c = new Client; c.accept; public void accept try while (true) BufferedReader br = new BufferedReader

20、(new InputStreamReader( socket.getInputStream); char msg = new char1024; String msgs = ; while (br.read(msg) != -1) msgs = new String(msg); if (msgs != null) content += : + df.format(new Date) + n + msgs.trim + n; getContentText.setText(content); catch (IOException e) e.printStackTrace; 2.服务器端 packa

21、ge com.server; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import .ServerSocket; import .Socket; import java.text.DateFormat; import java.text.SimpleD

22、ateFormat; import java.util.Date; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import com.client.Client; import com.ui.ChatUI; public class Server extends ChatUI implements ActionListener private String content = ; ServerSocket server; Socket socket; DateFormat d

23、f = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); public Server super(服务器); getSendBtn.addActionListener(this); getCancelBtn.addActionListener(this); try server = new ServerSocket(1234); while (true) socket = server.accept; ServerThread s = new ServerThread(socket, getContentText); new Thread(s).start;

24、 catch (IOException e) e.printStackTrace; public static void main(String args) try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName); catch (ClassNotFoundException e) e.printStackTrace; catch (InstantiationException e) e.printStackTrace; catch (IllegalAccessException e) e.printStackT

25、race; catch (UnsupportedLookAndFeelException e) e.printStackTrace; new Server; / s.accept; public void actionPerformed(ActionEvent e) if (e.getActionCommand.equals(Send) String msg = getMsgText.getText; String s = 服务器: + df.format(new Date) + n; content += s + msg + n; getContentText.setText(content

26、); getMsgText.setText(); try PrintStream ps = new PrintStream(socket.getOutputStream); ps.println(msg); catch (IOException e1) e1.printStackTrace; else if (e.getActionCommand.equals(Cancel) System.exit(0); public void accept try while (true) BufferedReader br = new BufferedReader(new InputStreamRead

27、er( socket.getInputStream); char msg = new char1024; String msgs = ; while (br.read(msg) != -1) msgs = new String(msg); if (msgs != null) content += 客户端: + df.format(new Date) + n + msgs.trim + n; getContentText.setText(content); catch (IOException e) e.printStackTrace; 3.服务器端线程 package com.server;

28、import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import .Socket; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.JTextArea; public class ServerThread implements Runnable Socket socket; JTextArea con

29、tentText; DateFormat df = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); String content; public ServerThread(Socket socket, JTextArea contentText) this.socket = socket; this.contentText = contentText; public void run try while (true) BufferedReader br = new BufferedReader(new InputStreamReader( socket.g

30、etInputStream); char msg = new char1024; String msgs = ; while (br.read(msg) != -1) msgs = new String(msg); if (msgs != null) content += 客户端: + df.format(new Date) + n + msgs.trim + n; contentText.setText(content); System.out.println(content); catch (IOException e) e.printStackTrace; 4.界面 package co

31、m.ui; import java.awt.Adjustable; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; import java.awt.ScrollPane; import javax.naming.Context; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.J

32、ScrollPane; import javax.swing.JTextArea; import javax.swing.JViewport; import javax.swing.WindowConstants; public class ChatUI extends JFrame private JTextArea contentText, msgText; private JButton sendBtn, cancelBtn; public ChatUI(String title) super(title); setLayout(new BorderLayout); setVisible

33、(true); setBounds(250, 150, 530, 450); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); / JPanel conentPanel = new JPanel; ScrollPane scroll = new ScrollPane; scroll.setWheelScrollingEnabled(true); scroll.setSize(470, 300); contentText = new JTextArea(12, 40); contentText.setLineWrap(true);

34、/ JViewport jv = new JViewport; / jv.setViewPosition(new Point(conentPanel.getX,conentPanel.getY+500); / scroll.setViewport(jv); scroll.add(contentText); conentPanel.add(scroll); / JPanel msgPanel = new JPanel; ScrollPane scrollMsgPanel = new ScrollPane; scroll.setWheelScrollingEnabled(true); scroll

35、MsgPanel.setSize(470, 70); msgText = new JTextArea(3, 40); msgText.setLineWrap(true); scrollMsgPanel.add(msgText); msgPanel.add(scrollMsgPanel); / JPanel btnPanel = new JPanel; sendBtn = new JButton(Send); cancelBtn = new JButton(Cancel); btnPanel.add(sendBtn); btnPanel.add(cancelBtn); getContentPan

36、e.add(conentPanel, BorderLayout.NORTH); getContentPane.add(msgPanel, BorderLayout.CENTER); getContentPane.add(btnPanel, BorderLayout.SOUTH); public JButton getCancelBtn return cancelBtn; public void setCancelBtn(JButton cancelBtn) this.cancelBtn = cancelBtn; public JTextArea getContentText return co

37、ntentText; public void setContentText(JTextArea contentText) this.contentText = contentText; public JTextArea getMsgText return msgText; public void setMsgText(JTextArea msgText) this.msgText = msgText; public JButton getSendBtn return sendBtn; public void setSendBtn(JButton sendBtn) this.sendBtn =

38、sendBtn; Java网络聊天室程序 服务器端: /package chapter1; import .*; import java.io.*; import java.util.*; public class ChatServer /* * param args * m_threads是一个Vector静态变量,维护所有Server方的ServerThread对象, * 通过该变量能向所有加入聊天室的聊天者ChatApplet广播信息,撤销退出的聊天者。 * 聊天服务者ChatServer的主方法。该方法监听聊天者Chat Applet的请求, * 并为新连接的聊天者创建一个服务线程。

39、*/ public static void main(String args) / TODO Auto-generated method stub ServerSocket socket=null; Vector m_threads=new Vector; System.out.println(listen.); try /设置ServerSocket监听端口号为5555,这个数字必须和程序聊天者ChatApplet中的port参数一致 socket=new ServerSocket(5555); catch(Exception e) System.out.println(new Server

40、Socket failed!); return; try int nid=0; while(true) /监听是否有新聊天者Chat Applet连接到聊天Server, /线程运行到该语句会封锁,直到有新的连接产生 Socket s=socket.accept; System.out.println(accepted); /创建一个新的ServerThread ServerThread st=new ServerThread(s,m_threads); /为该线程设置一个ID号 st.setID(nid+); /将线程加入到m_threads Vector中 m_threads.addElement(st); /启动服务线程 new Thread(st).start; /通知所有ChatApplet有一个新的网友加入 for(int i=0;im_threads.size;i+

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号