java 仿QQ聊天代码

来源:互联网 发布:淘宝限制发布商品怎么办 编辑:程序博客网 时间:2024/05/17 04:27
    本源码实现了群聊和私聊

  截图如下:

代码文件清单如下:

Client.java、ClientThread.java、Server.java、ServerThread.java共四个java文件

因为本人的能力有限,如果你觉得那里有不合理的地方可以给我留言或者q我

下面是Client.java代码内容:

===================================================================================================

package cc;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.IOException;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Inet4Address;import java.net.Socket;import java.net.UnknownHostException;import javax.swing.JButton;import javax.swing.JColorChooser;import javax.swing.JComboBox;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.UIManager;public class Client extends JFrame implements ActionListener {private JPanel jp;private JButton connect, send, exit;private JTextArea ja;private Socket socket = null;public JTextArea getJa() {return ja;}public void setJa(JTextArea ja) {this.ja = ja;}private JTextField juser, jmess;private JScrollPane jsp;private JComboBox jcb;public JComboBox getJcb() {return jcb;}public void setJcb(JComboBox jcb) {this.jcb = jcb;}public Client() {try {UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}into();this.setBounds(100, 200, 390, 350);this.setDefaultCloseOperation(EXIT_ON_CLOSE);}public void into() {jp = new JPanel();jp.setLayout(null);this.add(jp);juser = new JTextField();juser.setBounds(60, 15, 150, 20);jp.add(juser);connect = new JButton("Connect");connect.addActionListener(this);connect.setBounds(220, 15, 80, 20);jp.add(connect);ja = new JTextArea();ja.setLineWrap(true);ja.setSize(350, 220);jsp = new JScrollPane(ja, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);jsp.setBounds(20, 40, 340, 220);jp.add(jsp);// 添加用于发送信息的文本框jmess = new JTextField();jmess.setBounds(15, 275, 130, 20);jp.add(jmess);// 添加用户名称的下拉菜单jcb = new JComboBox();jcb.addItem("USERS");jcb.setBounds(152, 275, 80, 20);jp.add(jcb);// 添加发送按钮send = new JButton("发送");send.setBounds(235, 273, 60, 25);send.addActionListener(this);send.setEnabled(false);jp.add(send);// 添加推出按钮exit = new JButton("退出");exit.setBounds(300, 273, 60, 25);exit.addActionListener(this);exit.setEnabled(false);jp.add(exit);}public static void main(String[] args) {new Client().setVisible(true);}@Overridepublic void actionPerformed(ActionEvent e) {String name = e.getActionCommand();if (name.equals("Connect")) {if (juser.getText().equals("")) {JOptionPane jop = new JOptionPane();jop.showMessageDialog(this, "用户名不能为空!!");System.out.println("用户名为空!!");} else {try {// 获取ip和用户名格式 USERS:iP:usersocket = new Socket("127.0.0.1", 8090);// scoket=new Socket(loclhost, 8090)String ip = Inet4Address.getLocalHost().getHostAddress();StringBuffer sr = new StringBuffer("USERS:");sr.append(ip).append(":").append(juser.getText().trim());OutputStream os = socket.getOutputStream();PrintWriter pw = new PrintWriter(os);pw.println(sr.toString());pw.flush();ClientThread ct = new ClientThread(this, socket);ct.start();send.setEnabled(true);exit.setEnabled(true);connect.setEnabled(false);} catch (UnknownHostException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}if (name.equals("发送")) {System.out.println(socket.toString());// 群聊StringBuffer mess = new StringBuffer("MESS");System.out.println("以下是信息!");System.out.println(jcb.getSelectedItem().toString());if (jcb.getSelectedItem().toString().equals("USER")) {mess.append(":").append("USERS").append(":").append(juser.getText().trim()).append(":").append(jmess.getText().trim());try {PrintWriter pw = new PrintWriter(socket.getOutputStream());System.out.println(mess.toString());pw.println(mess.toString());pw.flush();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}jmess.setText("");} else {mess.append(":").append(jcb.getSelectedItem().toString()).append(":").append(juser.getText().trim()).append(":").append(jmess.getText().trim());try {PrintWriter pw = new PrintWriter(socket.getOutputStream());System.out.println("我是私聊"+mess.toString());pw.println(mess.toString());pw.flush();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}jmess.setText("");}}}}


下面是ClientThread.java

=============================================================================================================================

package cc;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;public class ClientThread extends Thread {private Client client;private Socket socket;private BufferedReader br;private PrintWriter pw;private boolean bo = true;public ClientThread(Client client, Socket socket) {this.client = client;this.socket = socket;try {br = new BufferedReader(new InputStreamReader(socket.getInputStream()));pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void run() {while (bo) {try {String mess = br.readLine();String[] me = mess.split(":");System.out.println("把用户名传递过来"+mess);if (me[0].equals("USER")) {client.getJcb().removeAllItems();for (int i = 0; i < me.length; i++) {client.getJcb().addItem(me[i]);}}else if (me[0].equals("MESS")) {client.getJa().append(me[2]+":"+me[3]+"\n");} } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}


下面是Server.java

===================================================================================================================================

package cc;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;public class ClientThread extends Thread {private Client client;private Socket socket;private BufferedReader br;private PrintWriter pw;private boolean bo = true;public ClientThread(Client client, Socket socket) {this.client = client;this.socket = socket;try {br = new BufferedReader(new InputStreamReader(socket.getInputStream()));pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void run() {while (bo) {try {String mess = br.readLine();String[] me = mess.split(":");System.out.println("把用户名传递过来"+mess);if (me[0].equals("USER")) {client.getJcb().removeAllItems();for (int i = 0; i < me.length; i++) {client.getJcb().addItem(me[i]);}}else if (me[0].equals("MESS")) {client.getJa().append(me[2]+":"+me[3]+"\n");} } catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

 下面是ServerThread,java

=====================================================================================================================

package cc;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;public class ServerThread implements Runnable {private PrintWriter pw;private Socket socket;private String qqname;private BufferedReader br;public PrintWriter getPw() {return pw;}public void setPw(PrintWriter pw) {this.pw = pw;}public String getQqname() {return qqname;}public void setQqname(String qqname) {this.qqname = qqname;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}private String ip;public ServerThread(Socket socket) {this.socket = socket;try {br = new BufferedReader(new InputStreamReader(socket.getInputStream()));pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));String mess = br.readLine();System.out.println("ServerThread"+mess);String[] me = mess.split(":");ip = me[1];qqname = me[2];} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overridepublic void run() {while (true) {try {System.out.println(Thread.currentThread());System.out.println("aaaa");String mess = br.readLine();System.out.println(mess);String[] s = mess.split(":");System.out.println("你好" + mess);String jishouNeme=s[1];System.out.println("发送名字"+s[2]+"         接受名字"+jishouNeme);if (s[0].equals("MESS") && s[1].equals("USERS")) {Server.AllUser(mess);}if(s[0].equals("MESS") && !s[1].equals("USERS")){System.out.println("我是私聊   server");Server.OnleUser(mess, getQqname(),jishouNeme);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}