课 程 设 计 报 告 书 专 用 纸
(5)Node.java:用户链表的节点类,定义了链表中的用户。该类与前面所讲的链表节点Node类的功能相当。
import java.net.*; import java.io.*; /**
* 用户链表的结点类 */
public class Node { String username = null; Socket socket = null; }
ObjectOutputStream output = null; ObjectInputStream input = null; Node next = null;
(6)UserLinkList.java:用户链表节点的具体实现类。该类通过构造函数构造用户链表,定义了添加用户,删除用户、返回用户数、根据用户名查找用户、根据索引查找用户这5个方法。
/**
* 用户链表 */
public class UserLinkList {
Node root; Node pointer; int count; /**
* 构造用户链表 */
public UserLinkList(){ }
/**
* 添加用户
*/
public void addUser(Node n){
pointer = root;
while(pointer.next != null){ pointer = pointer.next; }
pointer.next = n; root = new Node(); root.next = null; pointer = null; count = 0;
第 20 页 共 18 页
课 程 设 计 报 告 书 专 用 纸
n.next = null;
count++; } /**
* 删除用户 */
public void delUser(Node n){ pointer = root;
while(pointer.next != null){ if(pointer.next == n){ pointer.next = n.next; count --;
break;
}
pointer = pointer.next;
}
} /**
* 返回用户数 */
public int getCount(){ return count;
}
/**
* 根据用户名查找用户
*/
public Node findUser(String username){ if(count == 0) return null; pointer = root; while(pointer.next != null){ pointer = pointer.next;
if(pointer.username.equalsIgnoreCase(username)){ return pointer;
}
}
return null;
} /**
* 根据索引查找用户
*/
public Node findUser(int index){ if(count == 0) {
return null;
第 21 页 共 18 页
课 程 设 计 报 告 书 专 用 纸
}
}
}
if(index < 0) { return null; }
pointer = root; int i = 0;
while(i < index + 1){
if(pointer.next != null){ pointer = pointer.next; }
else{ }
return null;
i++; }
return pointer;
(7)Help.java:服务端程序的帮助类。
import java.awt.*;
import javax.swing.border.*; import java.net.*; import javax.swing.*; import java.awt.event.*; /**
* 生成设置对话框的类 */
public class Help extends JDialog {
JPanel titlePanel = new JPanel(); JPanel contentPanel = new JPanel(); JPanel closePanel = new JPanel(); JButton close = new JButton();
JLabel title = new JLabel(\聊天室服务端帮助\JTextArea help = new JTextArea(); Color bg = new Color(255,255,255); public Help(JFrame frame) { super(frame, true);
try { jbInit();
}
catch (Exception e) { e.printStackTrace(); }
//设置运行位置,使对话框居中
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
第 22 页 共 18 页
课 程 设 计 报 告 书 专 用 纸
}
this.setLocation( (int) (screenSize.width - 400) / 2,
(int) (screenSize.height - 320) / 2);
this.setResizable(false); }
private void jbInit() throws Exception { }
this.setSize(new Dimension(400, 200)); this.setTitle(\帮助\
titlePanel.setBackground(bg);;
contentPanel.setBackground(bg); closePanel.setBackground(bg);
help.setText(\、设置服务端的侦听端口(默认端口为8888)。\\n\
\、点击 启动服务 按钮便可在指定的端口启动服务。\\n\
\、选择需要接受消息的用户,在消息栏中写入消息,之后便可发送消息。\\n\
\、信息状态栏中显示服务器当前的启动与停止状态、\ \用户发送的消息和\\n 服务器端发送的系统消息。\help.setEditable(false);
titlePanel.add(new Label(\titlePanel.add(title);
titlePanel.add(new Label(\contentPanel.add(help);
closePanel.add(new Label(\closePanel.add(close);
closePanel.add(new Label(\Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout());
contentPane.add(titlePanel, BorderLayout.NORTH); contentPane.add(contentPanel, BorderLayout.CENTER); contentPane.add(closePanel, BorderLayout.SOUTH); close.setText(\关闭\//事件处理
close.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) { dispose(); } });
? 聊天室客户端设计:
聊天室客户端主要包括5个文件,它们的功能如下:
(1)ChatClient.java:包含名为ChatClient的public类,其主要功能为定义客户端的界面,添加事件侦听与事件处理。该类定义了Connect()与DisConnect()方法实现与服务器的连接与断开连接。当登录到指定的服务器时,调用
第 23 页 共 18 页
课 程 设 计 报 告 书 专 用 纸
ClientReceive类实现消息收发,同时该类还定义了SendMessage()方法来向其他用户发送带有表情的消息或者悄悄话。
//package Client;
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.net.*; /*
* 聊天客户端的主框架类 */
public class ChatClient extends JFrame implements ActionListener{
/** * */
private static final long serialVersionUID = 1L; String ip = \连接到服务端的ip地址 int port = 8888;//连接到服务端的端口号 String userName = \匆匆过客\用户名 int type = 0;//0表示未连接,1表示已连接 JComboBox combobox;//选择发送消息的接受者 JTextArea messageShow;//客户端的信息显示
JScrollPane messageScrollPane;//信息显示的滚动条 JLabel express,sendToLabel,messageLabel ; JTextField clientMessage;//客户端消息的发送 JCheckBox checkbox;//悄悄话
JComboBox actionlist;//表情选择
JButton clientMessageButton;//发送消息 JTextField showStatus;//显示用户连接状态 Socket socket;
ObjectOutputStream output;//网络套接字输出流 ObjectInputStream input;//网络套接字输入流 ClientReceive recvThread; //建立菜单栏
JMenuBar jMenuBar = new JMenuBar(); //建立菜单组
JMenu operateMenu = new JMenu (\操作(O)\
//建立菜单项
JMenuItem loginItem = new JMenuItem (\用户登录(I)\
ImageIcon(\
JMenuItem logoffItem = new JMenuItem (\用户注销(L)\ImageIcon(\ JMenuItem exitItem=new ImageIcon(\
JMenuItem
(\
退
出
(X)\
第 24 页 共 18 页