⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java写的聊天工具源码.txt

📁 可以在局域网中实现两计算机间的通讯
💻 TXT
📖 第 1 页 / 共 2 页
字号:
JAVA写的聊天工具源码

//客户端源码

package chatclient04310710411;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;

import java.io.*;
import java.net.*;
import java.util.StringTokenizer;
import java.lang.Thread;

/**
* <p>Title: Chat Client</p>
* <p>Description: 聊天系统客户端</p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: MIAO</p>
* @author SunYang
* @version 1.0
*/

public class ClientFrame
extends JFrame {
JPanel contentPane;
XYLayout xYLayout1 = new XYLayout();
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
XYLayout xYLayout2 = new XYLayout();
JButton send = new JButton();
JButton exit = new JButton();
JTextField jTextField1 = new JTextField();
JTextField jTextField2 = new JTextField();
JScrollPane jScrollPane1 = new JScrollPane();
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
List list1 = new List();
JRadioButton jRadioButton1 = new JRadioButton();
JRadioButton jRadioButton2 = new JRadioButton();
ButtonGroup buttonGroup1 = new ButtonGroup();
XYLayout xYLayout3 = new XYLayout();
JScrollPane jScrollPane2 = new JScrollPane();
JLabel jLabel3 = new JLabel();
JTextField jTextField3 = new JTextField();
JButton link = new JButton();
JTextArea jTextArea1 = new JTextArea();

Socket socket = null;
DataInputStream dis = null;
DataOutputStream ps = null;
Listen listen = null; //定义客户端线程
InetAddress ip;
int count = 0;
String name = null;
JTextField jTextField4 = new JTextField();
JLabel jLabel4 = new JLabel();

//Construct the frame
public ClientFrame() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}

//Component initialization
private void jbInit() throws Exception {
contentPane = (JPanel)this.getContentPane();
contentPane.setLayout(xYLayout1);
this.setSize(new Dimension(400, 335));
this.setTitle("Chat System Client");
jPanel1.setLayout(xYLayout2);
send.setFont(new java.awt.Font("SansSerif", 0, 12));
send.setForeground(Color.blue);
send.setText("send");
send.addActionListener(new ClientFrame_send_actionAdapter(this));
exit.setFont(new java.awt.Font("SansSerif", 0, 12));
exit.setForeground(Color.blue);
exit.setText("exit");
exit.addActionListener(new ClientFrame_exit_actionAdapter(this));
jLabel1.setFont(new java.awt.Font("SansSerif", 0, 12));
jLabel1.setForeground(Color.blue);
jLabel1.setText("Name List");
jLabel2.setFont(new java.awt.Font("SansSerif", 0, 12));
jLabel2.setForeground(Color.blue);
jLabel2.setText("choose manner");
jRadioButton1.setFont(new java.awt.Font("SansSerif", 0, 12));
jRadioButton1.setForeground(Color.blue);
jRadioButton1.setDebugGraphicsOptions(0);
jRadioButton1.setBorderPainted(false);
jRadioButton1.setText("broadcast send");
jRadioButton2.setFont(new java.awt.Font("SansSerif", 0, 12));
jRadioButton2.setForeground(Color.blue);
jRadioButton2.setText("elect send");
jPanel2.setLayout(xYLayout3);
jScrollPane2.setMinimumSize(new Dimension(25, 25));
jLabel3.setFont(new java.awt.Font("SansSerif", 0, 12));
jLabel3.setForeground(Color.blue);
jLabel3.setText("fill in user name");
link.setFont(new java.awt.Font("SansSerif", 0, 12));
link.setForeground(Color.blue);
link.setText("link");
link.addActionListener(new ClientFrame_link_actionAdapter(this));
jTextArea1.setCaretColor(Color.blue);
jTextArea1.setText("");
jTextField1.setCaretColor(Color.black);
jTextField1.setText("");
jTextField2.setCaretColor(new Color(255, 255, 125));
jTextField2.setEditable(false);
jTextField2.setText("");
jTextField3.setText("");
jLabel4.setForeground(Color.red);
jLabel4.setText("host computer IP");
contentPane.add(jPanel1, new XYConstraints(2, 5, 132, 231));
jPanel1.add(jScrollPane1, new XYConstraints(2, 26, 124, 137));
jScrollPane1.getViewport().add(list1, null);
jPanel1.add(jLabel1, new XYConstraints(3, 2, 101, -1));
jPanel1.add(jLabel2, new XYConstraints(1, 164, 125, 19));
jPanel1.add(jRadioButton2, new XYConstraints(2, 181, 91, -1));
jPanel1.add(jRadioButton1, new XYConstraints(4, 203, 112, -1));
contentPane.add(jPanel2, new XYConstraints(138, 5, 260, 232));
jPanel2.add(jScrollPane2, new XYConstraints(0, 53, 252, 171));
jScrollPane2.getViewport().add(jTextArea1, null);
jPanel2.add(jTextField3, new XYConstraints(98, 0, 89, -1));
jPanel2.add(link, new XYConstraints(190, 0, 62, 23));
jPanel2.add(jLabel3, new XYConstraints(0, 1, 99, -1));
jPanel2.add(jTextField4, new XYConstraints(98, 28, 153, 23));
jPanel2.add(jLabel4, new XYConstraints(2, 25, 93, 24));
contentPane.add(jTextField1, new XYConstraints(3, 243, 317, 24));
contentPane.add(jTextField2, new XYConstraints(4, 274, 316, 25));
contentPane.add(send, new XYConstraints(333, 246, -1, 24));
contentPane.add(exit, new XYConstraints(333, 276, 63, 24));
buttonGroup1.add(jRadioButton1);
buttonGroup1.add(jRadioButton2);
}

//Overridden so we can exit when window is closed
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
disconnect();
System.exit(0);
}
}

void link_actionPerformed(ActionEvent e) {
if (socket == null) {
try {
socket = new Socket(jTextField4.getText(), 4000);
if (socket != null) {

dis = new DataInputStream(socket.getInputStream());
ps = new DataOutputStream(socket.getOutputStream());


StringBuffer info = new StringBuffer("PEOPLE:");
info.append(jTextField3.getText() + ":");
info.append(InetAddress.getLocalHost().toString());
send(info.toString());
listen = new Listen(jTextField3.getText());
listen.start();

}
else {
jTextArea1.append(jTextField3.getText() + "登录失败n");
}

}
catch (Exception ex1) {
jTextArea1.append(jTextField3.getText() + "登录失败n");
disconnect();
}
}
}

void send_actionPerformed(ActionEvent e) {
if (socket != null) {
StringBuffer message = new StringBuffer("MSG:");
if (jRadioButton1.isSelected()) {
message.append("BROAD:");
}
else {
message.append(list1.getSelectedItem() + ":");
}
message.append(name + ":");
message.append(jTextField1.getText());
send(message.toString());
jTextField1.setText("");
}
}

void exit_actionPerformed(ActionEvent e) {
disconnect();
System.exit(0);
}

public void disconnect() {
if (socket != null) {
try {
send("QUIT: " + name);
socket.close();
}
catch (IOException ex) {
jTextArea1.append("Error: " + ex);
}
finally {
listen.stop();
socket = null;
name = null;
}
}
}

private void send(String msg) {
try {
ps.writeUTF(msg);
ps.flush();
}
catch (IOException ex) {
jTextArea1.append("发送时错误!n Error: " + ex);
}
}

public class Listen
extends Thread {
public Listen(String n) {
name = n;
}

public void run() {
String message = null;
while (true) {
try {
message = dis.readUTF();
}
catch (IOException ex) {
jTextArea1.append("读取服务器信息错误" + "nError: " + ex + "n");
disconnect();
stop();
}
if (message == null) {
listen = null;
socket = null;
list1.removeAll();
return;
}
StringTokenizer str = new StringTokenizer(message, ":");
String keyword = str.nextToken();
if (keyword.equalsIgnoreCase("PEOPLE")) {
count = 0;
list1.removeAll();
while (str.hasMoreTokens()) {
String st = str.nextToken();
list1.add(st);
count++;
}
jTextField2.setText("目前连接的用户数: " + String.valueOf(count));
}
else if (keyword.equalsIgnoreCase("MSG")) {
String broadcast = str.nextToken();
String usr = str.nextToken();
jTextArea1.append(usr);
jTextArea1.append(str.nextToken(""));
jTextArea1.append("n");

}
else if (keyword.equalsIgnoreCase("QUIT")) {
String who = str.nextToken();
if (who.equalsIgnoreCase("SERVER")) {
jTextArea1.append("服务器关闭n");
jTextField2.setText("");
list1.removeAll();

try {
listen = null;
socket.close();
socket = null;
stop();
}
catch (IOException ex1) {
jTextArea1.append("Error: " + ex1 + "n");
}

}
else {
jTextArea1.append(who + " 已经离开n");
}
}
else if (keyword.equalsIgnoreCase("WELCOME")) {
jTextArea1.append("" + name + " ,登录成功n");
}
else if (keyword.equalsIgnoreCase("FAULTNAME")) {
jTextArea1.append("该用户名已存在n" + "请更换其他用户名n");
if (socket != null) {
try {
socket.close();
socket = null;
name = null;
this.stop();
}
catch (IOException ex2) {
jTextArea1.append("Error: " + ex2);
}
}
}
}
}
}
}

class ClientFrame_link_actionAdapter
implements java.awt.event.ActionListener {
ClientFrame adaptee;

ClientFrame_link_actionAdapter(ClientFrame adaptee) {
this.adaptee = adaptee;
}

public void actionPerformed(ActionEvent e) {
adaptee.link_actionPerformed(e);
}
}

class ClientFrame_send_actionAdapter
implements java.awt.event.ActionListener {
ClientFrame adaptee;

ClientFrame_send_actionAdapter(ClientFrame adaptee) {
this.adaptee = adaptee;
}

public void actionPerformed(ActionEvent e) {
adaptee.send_actionPerformed(e);
}
}

class ClientFrame_exit_actionAdapter
implements java.awt.event.ActionListener {
ClientFrame adaptee;

ClientFrame_exit_actionAdapter(ClientFrame adaptee) {
this.adaptee = adaptee;
}

public void actionPerformed(ActionEvent e) {
adaptee.exit_actionPerformed(e);
}
}


//服务端源码

package chatsystem04310710411;

import java.io.*;
import java.net.*;
import java.util.Vector;
import java.util.StringTokenizer;
import java.lang.Thread;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;


/**
* <p>Title: CHatSystem</p>
* <p>Description: 多人聊天系统</p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: MIAO</p>
* @author SunYang
* @version 1.0
*/

public class SreverFrame
extends JFrame {
JPanel contentPane;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -