Java 多人聊天 源码

Java 多人聊天 源码
Java 多人聊天 源码

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

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

}

}

相关主题
相关文档
最新文档