\\n\
课 程 设 计 报 告 书 专 用 纸
try{ client.output.writeObject(\聊天信息\ client.output.flush();
client.output.writeObject(msg); client.output.flush();
}
catch (Exception e){
//System.out.println(\
}
Node node = userLinkList.findUser(toSomebody);
if(node != null){ node.output.writeObject(\聊天信息\ node.output.flush();
node.output.writeObject(msg); node.output.flush();
}
}
}
else if(type.equalsIgnoreCase(\用户下线\ Node node = userLinkList.findUser(client.username); userLinkList.delUser(node);
String msg = \用户 \下线\\n\ int count = userLinkList.getCount(); combobox.removeAllItems(); combobox.addItem(\所有人\ int i = 0;
while(i < count){ node = userLinkList.findUser(i); if(node == null) { i ++; continue; }
combobox.addItem(node.username);
i++;
}
combobox.setSelectedIndex(0); textarea.append(msg);
textfield.setText(\在线用户\人 sendToAll(msg);//向所有人发送消息
sendUserList();//重新发送用户列表,刷新
第 15 页 共 18 页
课 程 设 计 报 告 书 专 用 纸
break;
} }
catch (Exception e){ //System.out.println(e);
}
}
} /*
* 向所有人发送消息 */
public void sendToAll(String msg){ int count = userLinkList.getCount(); int i = 0; while(i < count){ Node node = userLinkList.findUser(i); if(node == null) { i ++;
continue;
}
try{ node.output.writeObject(\聊天信息\ node.output.flush();
node.output.writeObject(msg); node.output.flush(); }
catch (Exception e){ //System.out.println(e); }
i++;
}
}
/*
* 向所有人发送用户的列表 */
public void sendUserList(){ String userlist = \
int count = userLinkList.getCount(); int i = 0;
while(i < count){
Node node = userLinkList.findUser(i);
第 16 页 共 18 页
课 程 设 计 报 告 书 专 用 纸
}
}
}
i = 0;
while(i < count){ Node node = userLinkList.findUser(i); }
if(node == null) {
i ++; continue; } try{
node.output.writeObject(\用户列表\node.output.flush();
node.output.writeObject(userlist); node.output.flush(); if(node == null) {
i ++;
continue; }
userlist += node.username; userlist += '\\n'; i++;
}
catch (Exception e){
//System.out.println(e); } i++;
(4)PortConf.java:该类继承自JDialog,是用户对服务器端侦听端口进行修改配置的类。
import java.awt.*;
import javax.swing.border.*; import java.net.*; import javax.swing.*; import java.awt.event.*; /**
* 生成端口设置对话框的类
*/
public class PortConf extends JDialog {
JPanel panelPort = new JPanel(); JButton save = new JButton(); JButton cancel = new JButton();
public static JLabel DLGINFO=new JLabel( \默认端口号为:8888\
第 17 页 共 18 页
课 程 设 计 报 告 书 专 用 纸
JPanel panelSave = new JPanel(); JLabel message = new JLabel(); public static JTextField portNumber ; public PortConf(JFrame frame) { }
private void jbInit() throws Exception { this.setSize(new Dimension(300, 120));
this.setTitle(\端口设置\
message.setText(\请输入侦听的端口号:\portNumber = new JTextField(10); portNumber.setText(\save.setText(\保存\cancel.setText(\取消\
panelPort.setLayout(new FlowLayout()); panelPort.add(message); panelPort.add(portNumber);
panelSave.add(new Label(\panelSave.add(save); panelSave.add(cancel);
panelSave.add(new Label(\Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); contentPane.add(panelPort, BorderLayout.NORTH); contentPane.add(DLGINFO, BorderLayout.CENTER); contentPane.add(panelSave, BorderLayout.SOUTH); //保存按钮的事件处理 save.addActionListener( new ActionListener() { super(frame, true); try {
jbInit();
}
catch (Exception e) { e.printStackTrace(); }
//设置运行位置,使对话框居中
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation( (int) (screenSize.width - 400) / 2 + 50, (int) (screenSize.height - 600) / 2 + 150); this.setResizable(false);
第 18 页 共 18 页
课 程 设 计 报 告 书 专 用 纸
if(savePort<1 || savePort>65535){
PortConf.DLGINFO.setText(\侦听端口必
public void actionPerformed (ActionEvent a) {
int savePort; try{
savePort=Integer.parseInt(PortConf.portNumber.getText());
须是0-65535之间的整数!\
PortConf.portNumber.setText(\ return;
}
ChatServer.port = savePort; dispose();
} catch(NumberFormatException e){
PortConf.DLGINFO.setText(\端口号请填写整数!\
PortConf.portNumber.setText(\ return;
}
}
} );
//关闭对话框时的操作
this.addWindowListener(
new WindowAdapter(){ public void windowClosing(WindowEvent e){ DLGINFO.setText(\为:8888\
}
} );
//取消按钮的事件处理
cancel.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent e){
DLGINFO.setText(\为:8888\
dispose();
}
});
}
}
错误的端口号,默认端口号默认端口号第 19 页 共 18 页