Java 多人聊天 源码
![Java 多人聊天 源码](https://img.360docs.net/img74/03hoyj3y04guc3c3i9jy-41.webp)
![Java 多人聊天 源码](https://img.360docs.net/img74/03hoyj3y04guc3c3i9jy-52.webp)
Java 多人聊天源码
1.ChatApplet.java类
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import https://www.360docs.net/doc/735258514.html,yout.*;
import javax.swing.border.*;
import java.io.*;
import https://www.360docs.net/doc/735258514.html,.*;
public class ChatApplet extends JApplet {
boolean isStandalone = false;
BorderLayout borderLayout1 = new BorderLayout();
Border border1;
JPanel jPanel2 = new JPanel();
Border border2;
BorderLayout borderLayout2 = new BorderLayout();
JPanel jPanel1 = new JPanel();
JButton buttonSend = new JButton();
BorderLayout borderLayout3 = new BorderLayout();
JPanel jPanel3 = new JPanel();
Border border3;
BorderLayout borderLayout4 = new BorderLayout();
JTextField textTalk = new JTextField();
JPanel jPanel4 = new JPanel();
Border border4;
BorderLayout borderLayout5 = new BorderLayout();
JScrollPane jScrollPane1 = new JScrollPane();
JTextArea textMessages = new JTextArea();
PrintWriter out = null;
/**Get a parameter value*/
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def); }
/**Construct the applet*/
public ChatApplet() {
}
/**Initialize the applet*/
public void init() {
try {
jbInit();
Client client = new Client(this);
if (client.isConnected())
out = client.getOutputStream();
else
appendMessage("大大的错误!!");
}
catch(Exception e) {
e.printStackTrace();
}
}
/**Component initialization*/
private void jbInit() throws Exception {
border1 = BorderFactory.createEmptyBorder(9,9,9,9);
border2 = BorderFactory.createEmptyBorder(9,9,9,9);
border3 = BorderFactory.createEmptyBorder(2,0,2,5);
border4 = BorderFactory.createEmptyBorder(0,0,5,0);
this.setSize(new Dimension(400,300));
this.getContentPane().setLayout(borderLayout1);
jPanel2.setBorder(border2);
jPanel2.setLayout(borderLayout2);
buttonSend.setFocusPainted(false);
buttonSend.setText("发送");
buttonSend.addActionListener(new
java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
buttonSend_actionPerformed(e);
}
});
jPanel1.setLayout(borderLayout3);
jPanel3.setBorder(border3);
jPanel3.setLayout(borderLayout4);
jPanel4.setBorder(border4);
jPanel4.setLayout(borderLayout5);
textTalk.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(KeyEvent e) {
textTalk_keyPressed(e);
}
});
this.getContentPane().add(jPanel2, BorderLayout.CENTER);
jPanel2.add(jPanel1, BorderLayout.SOUTH);
jPanel1.add(buttonSend, BorderLayout.EAST);
jPanel1.add(jPanel3, BorderLayout.CENTER);
jPanel3.add(textTalk, BorderLayout.CENTER);
jPanel2.add(jPanel4, BorderLayout.CENTER);
jPanel4.add(jScrollPane1, BorderLayout.CENTER);
jScrollPane1.getViewport().add(textMessages, null);
}
/**Get Applet information*/
public String getAppletInfo() {
return "Applet Information";
}
/**Get parameter info*/
public String[][] getParameterInfo() {
return null;
}
/**Main method*/
public static void main(String[] args) {
ChatApplet applet = new ChatApplet();
applet.isStandalone = true;
JFrame frame = new JFrame();
//EXIT_ON_CLOSE == 3
frame.setDefaultCloseOperation(3);
frame.setTitle("Applet Frame");
frame.getContentPane().add(applet, BorderLayout.CENTER);
applet.init();
applet.start();
frame.setSize(400,320);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((d.width - frame.getSize().width) / 2, (d.height - frame.getSize().height) / 2);
frame.setVisible(true);
}
//static initializer for setting look & feel
static {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
//UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClass Name());
}
catch(Exception e) {
}
}
public void appendMessage(String message) {
textMessages.setText(message + textMessages.getText());
}
void buttonSend_actionPerformed(ActionEvent e) {
String msg;
msg = textTalk.getText().trim();
if (msg.equals("") || msg == null) return;
out.println(textTalk.getText());
textTalk.setText("");
}
void textTalk_keyPressed(KeyEvent e) {
if (e.getKeyChar() != '\n') return;
out.println(textTalk.getText());
textTalk.setText("");
}
}
2.ChatServlet.java
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class ChatServlet extends HttpServlet {
private static final String CONTENT_TYPE = "text/html";
/**Initialize global variables*/
public void init(ServletConfig config) throws ServletException { super.init(config);
try {
new Server();
}
catch (IOException ex) {
System.err.println("IO 错误:");
ex.printStackTrace(System.err);
destroy();
}
/**Process the HTTP Get request*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println("");
out.println("
out.println("
");out.println("
The servlet has received a GET. This is the reply.
");out.println("");
}
/**Clean up resources*/
public void destroy() {
}
}
3.Client.java
import java.io.*;
import https://www.360docs.net/doc/735258514.html,.*;
public class Client {
Socket socket = null;
private String host;
private boolean connected = false;
public boolean isConnected() { return connected; }
public Client(ChatApplet applet) {
try {
host = applet.getDocumentBase().getHost();
//host = "202.115.4.246";
socket = new Socket(host, Server.port);
connected = true;
new ClientRecieveThread(socket, applet).start();
}
catch (Exception ex) {
applet.appendMessage(ex.getMessage());
ex.printStackTrace(System.err);
}
public PrintWriter getOutputStream() throws IOException {
return new PrintWriter(socket.getOutputStream(), true);
}
}
4.ClientRecieveThread.java
import java.io.*;
import https://www.360docs.net/doc/735258514.html,.*;
public class ClientRecieveThread extends Thread {
private ChatApplet applet = null;
private Socket socket = null;
public ClientRecieveThread(Socket socket, ChatApplet applet) { this.socket = socket;
this.applet = applet;
}
public void run() {
BufferedReader in = null;
String inputLine;
try {
in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
while ((inputLine = in.readLine()) != null) {
//if (inputLine.equalsIgnoreCase("quit")) break; applet.appendMessage(inputLine + "\n");
}
}
catch (Exception ex) {
ex.printStackTrace(System.err);
}
finally {
Close();
}
}
void Close() {
try {
socket.close();
catch (Exception ex) {
ex.printStackTrace(System.err);
}
}
}
5.Protocol.java
public class Protocol {
private String userid;
public Protocol(String userid) {
https://www.360docs.net/doc/735258514.html,erid = userid;
}
public String processInput(String input) {
return (userid + ": " + input);
}
}
6.Server.java
import java.io.*;
import https://www.360docs.net/doc/735258514.html,.*;
import java.util.Vector;
public class Server {
private ServerSocket serverSocket = null;
public static int port = 4444;
private boolean listening = true;
Vector clientSockets = new Vector(10);
public Server() throws IOException {
try {
serverSocket = new ServerSocket(port);
}
catch (Exception ex) {
System.err.println("不能监听端口:" + port); ex.printStackTrace(System.err);
System.exit(-1);
System.out.println("成功监听端口:" + port);
while (listening)
addClient(serverSocket.accept());
serverSocket.close();
}
public void addClient(Socket socket) throws IOException {
new ServerThread(socket, this).start();
clientSockets.add(socket);
send("欢迎 " + socket.getInetAddress().getHostName() + " 来到这里!");
System.out.println("聊天室共有 " + clientSockets.size() + " 人");
}
public void removeClient(Socket socket) throws IOException {
send("欢送 " + socket.getInetAddress().getHostName() + " 的离去");
clientSockets.remove(socket);
System.out.println("聊天室共有 " + clientSockets.size() + " 人");
}
public void send(String msg) throws IOException {
Socket socket = null;
for (int I = 0; I < clientSockets.size(); I++) {
socket = (Socket)(clientSockets.get(I));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println(msg);
}
}
public static void main(String[] args) throws IOException {
new Server();
}
}
7.ServerThread.java
public class ServerThread extends Thread {
private Server server = null;
private Socket socket = null;
private Protocol jcp = null;
private String userid;
public ServerThread(Socket socket, Server server) {
super("jetic Chat Server");
this.socket = socket;
this.server = server;
userid = socket.getInetAddress().getHostName();
jcp = new Protocol(userid);
}
public void run() {
PrintWriter out = null;
BufferedReader in = null;
String inputLine, outputLine;
try {
out = new PrintWriter(socket.getOutputStream(), true); in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
out.println("你可以开始你的闲聊了:)");
while ((inputLine = in.readLine()) != null) {
if (inputLine.equalsIgnoreCase("quit")) break;
outputLine = jcp.processInput(inputLine);
server.send(outputLine);
}
}
catch (Exception ex) {
ex.printStackTrace(System.err);
Close();
}
finally {
Close();
}
}
private void Close() {
try {
server.removeClient(socket);
socket.close();
}
catch (Exception ex) {
ex.printStackTrace(System.err); }
}
}