您的位置:首页 > 编程语言 > Java开发

java 仿QQ聊天代码

2012-12-01 19:47 211 查看
本源码实现了群聊和私聊

截图如下:



代码文件清单如下:

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 block
e.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);
}

@Override
public 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:user
socket = 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 block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.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 block
e1.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 block
e1.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 block
e.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 block
e.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 block
e.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 block
e.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 block
e.printStackTrace();
}
}

@Override
public 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 block
e.printStackTrace();
}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: