目录
界面效果图
一、聊天室功能介绍?
二、功能代码
1.服务端
2.客户端
界面效果图
![]() | ![]() |
提示:以下是本篇文章正文内容,下面案例可供参考
一、聊天室功能介绍?
1. 、对于聊天室就是处理多个客户端发送的请求与信息,从而需要一个服务器端去处理这些客户端请求与信息,故采用的是服务器端/客户端模式(本章只讲解一个客户端与服务端的交流)。
2. 客户端与服务器端的连接:既然是多个客户端发送的请求与信息从而交给服务器端处理,那么客户端与服务器端之间需要进行连接。稍后会通过分析以及代码的方式进行详细操作
3. 客户端方面:客户端在与服务器端建立连接后,通过Socket对象获取输入输出流从而与服务器端之间进行通信。
4. 服务器端方面:服务器端的套接字ServerSocket对象在调用accept()方法侦听客户端的连接,当与客户端成功建立连接后,返回Socket对象,从而利用该Socket对象获取输入输出流从而与客户端进行通信。
二、功能代码
1.服务端
代码如下(示例):
package wdw;import java.awt.BorderLayout;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; import java.text.SimpleDateFormat; import java.util.Date;import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.UIManager;public class Fwd_UI extends JFrame implements ActionListener,KeyListener {public static void main(String[] args)throws Exception { // 设置界面的方格与系统相似(须在窗体加载之前) // UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");UIManager.setLookAndFeel("org.jb2011.lnf.beautyeye.BeautyEyeLookAndFeelCross");new Fwd_UI();}private JTextArea jta;private JScrollPane jsp;private JPanel jp;private JTextField jtf;private JButton jb;private BufferedWriter bh=null;public Fwd_UI() {jta=new JTextArea();jta.setEditable(false);jsp=new JScrollPane(jta);jp=new JPanel();jtf=new JTextField(10);jb=new JButton("发送");jp.add(jtf);jp.add(jb);this.add(jsp,BorderLayout.CENTER);this.add(jp,BorderLayout.SOUTH);this.setTitle("星泽聊天服务端");this.setSize(300,300);this.setLocation(500, 300);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);jb.addActionListener(this);jtf.addKeyListener(this);try {ServerSocket ServerSocket=new ServerSocket(8888);Socket Socket=ServerSocket.accept(); // InputStream in=Socket.getInputStream();BufferedReader br=new BufferedReader(new InputStreamReader(Socket.getInputStream()));bh= new BufferedWriter(new OutputStreamWriter(Socket.getOutputStream()));String line=null;Date sb=new Date();SimpleDateFormat sdf = new SimpleDateFormat();sdf.format(sb);jta.append("\t"+sdf.format(sb)+"\n");while ((line=br.readLine())!=null) {jta.append(line+System.lineSeparator());}Socket.close();} catch (Exception e) {e.printStackTrace();}}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubwdw();}//定义一个方法private void wdw() {String text=jtf.getText();text="服务端对客户端说:"+text;jta.append(text+System.lineSeparator());try {bh.write(text);bh.newLine();bh.flush();jtf.setText("");} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}@Overridepublic void keyPressed(KeyEvent e) {// TODO Auto-generated method stubif (e.getKeyCode()==KeyEvent.VK_ENTER) {wdw();}}@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stub}}
2.客户端
代码如下(示例):
package wdw;import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; import java.text.SimpleDateFormat; import java.util.Date;import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.UIManager;public class Khf_UI extends JFrame implements ActionListener,KeyListener {public static void main(String[] args)throws Exception { // 设置界面的方格与系统相似(须在窗体加载之前) // UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");UIManager.setLookAndFeel("org.jb2011.lnf.beautyeye.BeautyEyeLookAndFeelCross");new Khf_UI();}private JTextArea jta;private JScrollPane jsp;private JPanel jp;private JTextField jtf;private JButton jb;private BufferedWriter bh=null;public Khf_UI() {jta=new JTextArea();jta.setEditable(false);jsp=new JScrollPane(jta);jp=new JPanel();jtf=new JTextField(10);jb=new JButton("发送");jp.add(jtf);jp.add(jb);this.add(jsp,BorderLayout.CENTER);this.add(jp,BorderLayout.SOUTH);this.setTitle("星泽聊天客户端");this.setSize(300,300);this.setLocation(500, 300);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);jb.addActionListener(this);jtf.addKeyListener(this);try {Socket Socket=new Socket("127.0.0.1", 8888);// InputStream in=Socket.getInputStream();BufferedReader br=new BufferedReader(new InputStreamReader(Socket.getInputStream()));bh= new BufferedWriter(new OutputStreamWriter(Socket.getOutputStream()));String line=null;Date sb=new Date();SimpleDateFormat sdf = new SimpleDateFormat();sdf.format(sb);jta.append("\t"+sdf.format(sb)+"\n");while ((line=br.readLine())!=null) {jta.append(line+System.lineSeparator());}Socket.close();} catch (Exception e) {e.printStackTrace();}}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubwdw();}//定义一个方法private void wdw() {String text=jtf.getText();text="客户端对服务端说:"+text;jta.append(text+System.lineSeparator());try {bh.write(text);bh.newLine();bh.flush();jtf.setText("");} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}@Overridepublic void keyPressed(KeyEvent e) {// TODO Auto-generated method stubif (e.getKeyCode()==KeyEvent.VK_ENTER) {wdw();}}@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stub}}
该处使用的界面美化包,需要导包。