歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java 仿QQ聊天源代碼

Java 仿QQ聊天源代碼

日期:2017/3/1 10:05:44   编辑:Linux編程

Java 仿QQ聊天源代碼介紹,本源碼實現了群聊和私聊。

截圖如下:

代碼文件清單如下:

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("");
}
}

}

}

Copyright © Linux教程網 All Rights Reserved