java一个学期的成果
2012年01月13日
还有一年就能毕业了,真正毕业。
蛋疼的大学生活
java局域网聊天代码:
服务器端:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.util.*;
import java.io.*;
public class Server extends JFrame {
JMenuBar mb = new JMenuBar();
JMenu m1 = new JMenu("文件");
JMenu m2 = new JMenu("帮助");
JMenuItem mi1 = new JMenuItem("连接");
JMenuItem mi2 = new JMenuItem("退出");
JLabel lab1 = new JLabel("用户在线列表");
JLabel lab2 = new JLabel("消息:");
JTextArea ta = new JTextArea(9, 30);
java.awt.List list = new java.awt.List(9);
JTextField tf = new JTextField(24);
JButton b = new JButton("发送");
JScrollPane sp = new JScrollPane();
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
ServerSocket serverSocket;
Socket socket;
ArrayList array = new ArrayList();
int connect;
public Server() {
super("聊天服务器");
setJMenuBar(mb);
mb.add(m1);
mb.add(m2);
m1.add(mi1);
m1.addSeparator();
m1.add(mi2);
sp.getViewport().add(ta);
p1.setLayout(new BorderLayout());
p3.add(lab1);
p1.add(p3, BorderLayout.NORTH);
p1.add(list, BorderLayout.SOUTH);
p2.add(lab2);
p2.add(tf);
p2.add(b);
getContentPane().add(sp, BorderLayout.NORTH);
getContentPane().add(p1, BorderLayout.CENTER);
getContentPane().add(p2, BorderLayout.SOUTH);
pack();
setSize(400, 430);
setVisible(true);
setResizable(false);
//监听服务器连接按钮
mi1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (serverSocket == null) {
try {
serverSocket = new ServerSocket(7000);
ta.append("系统提示:" + " 聊天服务器"
+ " 正在启动......\n");
} catch (IOException ex) {
ta.append("系统提示:" + " 聊天服务器"
+ " 启动失败!\n");
}
} else {
ta.append("系统消息:" + " 聊天服务器"
+ " 已经启动......\n");
}
// 启动监听客户端连接线程
Thread t = new Watch();
t.start();
}
});
mi2.addActionListener(new ServerListener());
//菜单中的退出按钮事件监听
b.addActionListener(new ServerListener());
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
closeAll();
System.exit(0);
}
});
}
class Watch extends Thread {
public void run() {
while (true) {
if (array.size() socket = serverSocket.accept();
} catch (IOException ex) {
ta.append("系统消息: " + ex + "\n");
}
// 创建客户端线程,一个线程对应一个客户端
Client c = new Client(socket);
array.add(c);
c.start();
} else {
ta.append("系统消息:" + " 聊天服务器"
+ " 已经超过最大连接数,请待会连接!\n");
}
}
}
}
class Client extends Thread {
String name;
String ip;
String ipAddress;
Socket socket;
BufferedReader br;
PrintStream ps;
public Client(Socket s) {
try {
socket = s;
br = new BufferedReader(new InputStreamReader(s
.getInputStream()));
ps = new PrintStream(s.getOutputStream());
} catch (IOException ex) {
ta.append("系统消息: " + ex + "\n");
}
}
public void run() {
String info;
try {
while (true) {
info = br.readLine();
if (info == null)
break;
StringTokenizer st = new StringTokenizer(info, ":");
String keyword = st.nextToken();
// 处理客户端传来的信息
if (keyword.equals("CONNECT")) {
name = st.nextToken();
ip = st.nextToken();
ipAddress = ip.substring(ip.indexOf("/") + 1);
ta.append("系统消息: " + name + "/"
+ ipAddress + " 已经连接\n");
list.add(name + " " + ip
+ " 已经登录");
notifyChatRoom();
} else if (keyword.equals("MSG")) {
String broadcast = st.nextToken();
StringBuffer message = new StringBuffer("MSG:"
+ broadcast);
message.append(st.nextToken("\0"));
if (broadcast.equals("BROAD")) {
sendToClients(message);
} else {
sendToClient(message, broadcast);
}
} else if (keyword.equals("QUIT")) {
disConnect(this);
list.removeAll();
for (int i = 0; i 0) {
try {
for (int i = 0; i Socket socket;
PrintStream ps;
String name;
String ip;
public Client() {
super("聊天室");
p1.add(lab3);
p1.add(tf3);
p1.add(lab1);
p1.add(tf1);
p1.add(b1);
p1.add(b2);
p2.add(lab2);
p2.add(tf2);
p2.add(b3);
p3.setLayout(new BorderLayout());
p3.add(list, BorderLayout.NORTH);
p3.add(rb1, BorderLayout.CENTER);
p3.add(rb2, BorderLayout.SOUTH);
bg.add(rb1);
bg.add(rb2);
sp.getViewport().add(ta);
p4.add(p3);
p4.add(sp);
getContentPane().add(p1, BorderLayout.NORTH);
getContentPane().add(p4, BorderLayout.CENTER);
getContentPane().add(p2, BorderLayout.SOUTH);
pack();
setLocation(300,300);
setSize(460, 330);
setVisible(true);
setResizable(false);
b2.setEnabled(false);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
if (tf3.getText().compareTo("")==0 || tf1.getText().compareTo("")==0) {
JOptionPane.showMessageDialog(null,"服务器IP或着用户名不能为空,请输入您所要连接的服务器IP或者您的用户名","错误", JOptionPane.PLAIN_MESSAGE);
} else {
socket = new Socket(tf3.getText(), 7000);
if (socket != null) {
StringBuffer msg = new StringBuffer("CONNECT:");
name = tf1.getText();
ip = tf3.getText();
msg.append(name + ":" + ip);
ps = new PrintStream(socket.getOutputStream());
ps.println(msg);
ps.flush();
ta.setText("");
ta.append(name + "登录成功!" + "\n");
b1.setEnabled(false);
b2.setEnabled(true);
// 启动客户端线程,监听服务器端传来的信息
Thread t = new ClientListener(socket);
t.start();
}
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(null,"无法找到服务器,请确认服务器IP和服务器是否开启","错误", JOptionPane.PLAIN_MESSAGE);
ta.append("无法找到服务器,登陆失败!");
//ta.append("Error: " + ex + "\n");
}
}
});
b2.addActionListener(new ButtonListener());
b3.addActionListener(new ButtonListener());
//tf2.addActionListener(new TFListener());
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
if (socket != null) {
ps.println("QUIT:" + name);
ps.flush();
closeSocket();
}
System.exit(0);
}
});
}
class ClientListener extends Thread {
Socket socket;
BufferedReader br;
PrintStream ps;
String message;
public ClientListener(Socket s) {
try {
socket = s;
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
ps = new PrintStream(socket.getOutputStream());
} catch (IOException ex) {
ta.append("Error: " + ex + "\n");
}
}
public void run() {
while (true) {
try {
message = br.readLine();
if (message == null)
break;
} catch (IOException ex) {
ta.append("Error-debug: " + ex + "\n");
}
StringTokenizer st = new StringTokenizer(message, ":");
String keyword = st.nextToken();
// 服务器端传来各种信息的处理
if (keyword.equals("PEOPLE")) {
list.removeAll();
while (st.hasMoreTokens()) {
String user = st.nextToken();
list.add(user);
}
} else if (keyword.equals("MSG")) {
String broadcast = st.nextToken();
String user = st.nextToken();
StringBuffer sb = new StringBuffer(user
+ st.nextToken("\0"));
ta.append(sb + "\n");
} else if (keyword.equals("QUIT")) {
String who = st.nextToken();
if (who.equals("Server")) {
closeSocket();
ta.append("聊天服务器已经关闭!" + "\n");
list.removeAll();
b2.setEnabled(false);
} else {
closeSocket();
b1.setEnabled(true);
b2.setEnabled(false);
list.removeAll();
ta.append(name + "退出了聊天室!" + "\n");
}
break;
}
}
}
}
public void closeSocket() {
if (socket != null) {
try {
socket.close();
} catch (IOException ex) {
ta.append("Error: " + ex + "\n");
}
}
}
class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("退出")) {
ps.println("QUIT:" + name);
ps.flush();
} else if (e.getActionCommand().equals("发送")) {
StringBuffer msg = new StringBuffer("MSG:");
String info = name + ":" + tf2.getText();
if (rb1.isSelected()) {
msg.append("BROAD:" + info);
} else {
msg.append(list.getSelectedItem() + ":" + info);
}
ps.println(msg);
ps.flush();
tf2.setText("");
}
}
}
/* class TFListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
StringBuffer msg = new StringBuffer("MSG:");
String info = name + ":" + tf2.getText();
}
}
*/
public static void main(String[] args) {
Client app = new Client();
}
}
2012年01月13日
还有一年就能毕业了,真正毕业。
蛋疼的大学生活
java局域网聊天代码:
服务器端:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.util.*;
import java.io.*;
public class Server extends JFrame {
JMenuBar mb = new JMenuBar();
JMenu m1 = new JMenu("文件");
JMenu m2 = new JMenu("帮助");
JMenuItem mi1 = new JMenuItem("连接");
JMenuItem mi2 = new JMenuItem("退出");
JLabel lab1 = new JLabel("用户在线列表");
JLabel lab2 = new JLabel("消息:");
JTextArea ta = new JTextArea(9, 30);
java.awt.List list = new java.awt.List(9);
JTextField tf = new JTextField(24);
JButton b = new JButton("发送");
JScrollPane sp = new JScrollPane();
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
ServerSocket serverSocket;
Socket socket;
ArrayList array = new ArrayList();
int connect;
public Server() {
super("聊天服务器");
setJMenuBar(mb);
mb.add(m1);
mb.add(m2);
m1.add(mi1);
m1.addSeparator();
m1.add(mi2);
sp.getViewport().add(ta);
p1.setLayout(new BorderLayout());
p3.add(lab1);
p1.add(p3, BorderLayout.NORTH);
p1.add(list, BorderLayout.SOUTH);
p2.add(lab2);
p2.add(tf);
p2.add(b);
getContentPane().add(sp, BorderLayout.NORTH);
getContentPane().add(p1, BorderLayout.CENTER);
getContentPane().add(p2, BorderLayout.SOUTH);
pack();
setSize(400, 430);
setVisible(true);
setResizable(false);
//监听服务器连接按钮
mi1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (serverSocket == null) {
try {
serverSocket = new ServerSocket(7000);
ta.append("系统提示:" + " 聊天服务器"
+ " 正在启动......\n");
} catch (IOException ex) {
ta.append("系统提示:" + " 聊天服务器"
+ " 启动失败!\n");
}
} else {
ta.append("系统消息:" + " 聊天服务器"
+ " 已经启动......\n");
}
// 启动监听客户端连接线程
Thread t = new Watch();
t.start();
}
});
mi2.addActionListener(new ServerListener());
//菜单中的退出按钮事件监听
b.addActionListener(new ServerListener());
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
closeAll();
System.exit(0);
}
});
}
class Watch extends Thread {
public void run() {
while (true) {
if (array.size() socket = serverSocket.accept();
} catch (IOException ex) {
ta.append("系统消息: " + ex + "\n");
}
// 创建客户端线程,一个线程对应一个客户端
Client c = new Client(socket);
array.add(c);
c.start();
} else {
ta.append("系统消息:" + " 聊天服务器"
+ " 已经超过最大连接数,请待会连接!\n");
}
}
}
}
class Client extends Thread {
String name;
String ip;
String ipAddress;
Socket socket;
BufferedReader br;
PrintStream ps;
public Client(Socket s) {
try {
socket = s;
br = new BufferedReader(new InputStreamReader(s
.getInputStream()));
ps = new PrintStream(s.getOutputStream());
} catch (IOException ex) {
ta.append("系统消息: " + ex + "\n");
}
}
public void run() {
String info;
try {
while (true) {
info = br.readLine();
if (info == null)
break;
StringTokenizer st = new StringTokenizer(info, ":");
String keyword = st.nextToken();
// 处理客户端传来的信息
if (keyword.equals("CONNECT")) {
name = st.nextToken();
ip = st.nextToken();
ipAddress = ip.substring(ip.indexOf("/") + 1);
ta.append("系统消息: " + name + "/"
+ ipAddress + " 已经连接\n");
list.add(name + " " + ip
+ " 已经登录");
notifyChatRoom();
} else if (keyword.equals("MSG")) {
String broadcast = st.nextToken();
StringBuffer message = new StringBuffer("MSG:"
+ broadcast);
message.append(st.nextToken("\0"));
if (broadcast.equals("BROAD")) {
sendToClients(message);
} else {
sendToClient(message, broadcast);
}
} else if (keyword.equals("QUIT")) {
disConnect(this);
list.removeAll();
for (int i = 0; i 0) {
try {
for (int i = 0; i Socket socket;
PrintStream ps;
String name;
String ip;
public Client() {
super("聊天室");
p1.add(lab3);
p1.add(tf3);
p1.add(lab1);
p1.add(tf1);
p1.add(b1);
p1.add(b2);
p2.add(lab2);
p2.add(tf2);
p2.add(b3);
p3.setLayout(new BorderLayout());
p3.add(list, BorderLayout.NORTH);
p3.add(rb1, BorderLayout.CENTER);
p3.add(rb2, BorderLayout.SOUTH);
bg.add(rb1);
bg.add(rb2);
sp.getViewport().add(ta);
p4.add(p3);
p4.add(sp);
getContentPane().add(p1, BorderLayout.NORTH);
getContentPane().add(p4, BorderLayout.CENTER);
getContentPane().add(p2, BorderLayout.SOUTH);
pack();
setLocation(300,300);
setSize(460, 330);
setVisible(true);
setResizable(false);
b2.setEnabled(false);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
if (tf3.getText().compareTo("")==0 || tf1.getText().compareTo("")==0) {
JOptionPane.showMessageDialog(null,"服务器IP或着用户名不能为空,请输入您所要连接的服务器IP或者您的用户名","错误", JOptionPane.PLAIN_MESSAGE);
} else {
socket = new Socket(tf3.getText(), 7000);
if (socket != null) {
StringBuffer msg = new StringBuffer("CONNECT:");
name = tf1.getText();
ip = tf3.getText();
msg.append(name + ":" + ip);
ps = new PrintStream(socket.getOutputStream());
ps.println(msg);
ps.flush();
ta.setText("");
ta.append(name + "登录成功!" + "\n");
b1.setEnabled(false);
b2.setEnabled(true);
// 启动客户端线程,监听服务器端传来的信息
Thread t = new ClientListener(socket);
t.start();
}
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(null,"无法找到服务器,请确认服务器IP和服务器是否开启","错误", JOptionPane.PLAIN_MESSAGE);
ta.append("无法找到服务器,登陆失败!");
//ta.append("Error: " + ex + "\n");
}
}
});
b2.addActionListener(new ButtonListener());
b3.addActionListener(new ButtonListener());
//tf2.addActionListener(new TFListener());
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
if (socket != null) {
ps.println("QUIT:" + name);
ps.flush();
closeSocket();
}
System.exit(0);
}
});
}
class ClientListener extends Thread {
Socket socket;
BufferedReader br;
PrintStream ps;
String message;
public ClientListener(Socket s) {
try {
socket = s;
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
ps = new PrintStream(socket.getOutputStream());
} catch (IOException ex) {
ta.append("Error: " + ex + "\n");
}
}
public void run() {
while (true) {
try {
message = br.readLine();
if (message == null)
break;
} catch (IOException ex) {
ta.append("Error-debug: " + ex + "\n");
}
StringTokenizer st = new StringTokenizer(message, ":");
String keyword = st.nextToken();
// 服务器端传来各种信息的处理
if (keyword.equals("PEOPLE")) {
list.removeAll();
while (st.hasMoreTokens()) {
String user = st.nextToken();
list.add(user);
}
} else if (keyword.equals("MSG")) {
String broadcast = st.nextToken();
String user = st.nextToken();
StringBuffer sb = new StringBuffer(user
+ st.nextToken("\0"));
ta.append(sb + "\n");
} else if (keyword.equals("QUIT")) {
String who = st.nextToken();
if (who.equals("Server")) {
closeSocket();
ta.append("聊天服务器已经关闭!" + "\n");
list.removeAll();
b2.setEnabled(false);
} else {
closeSocket();
b1.setEnabled(true);
b2.setEnabled(false);
list.removeAll();
ta.append(name + "退出了聊天室!" + "\n");
}
break;
}
}
}
}
public void closeSocket() {
if (socket != null) {
try {
socket.close();
} catch (IOException ex) {
ta.append("Error: " + ex + "\n");
}
}
}
class ButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("退出")) {
ps.println("QUIT:" + name);
ps.flush();
} else if (e.getActionCommand().equals("发送")) {
StringBuffer msg = new StringBuffer("MSG:");
String info = name + ":" + tf2.getText();
if (rb1.isSelected()) {
msg.append("BROAD:" + info);
} else {
msg.append(list.getSelectedItem() + ":" + info);
}
ps.println(msg);
ps.flush();
tf2.setText("");
}
}
}
/* class TFListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
StringBuffer msg = new StringBuffer("MSG:");
String info = name + ":" + tf2.getText();
}
}
*/
public static void main(String[] args) {
Client app = new Client();
}
}