(1)提供用户登陆界面,用户信息输入、连接服务器等功能。 (2)常用用户信息正确性验证。
(3)登陆成功后,生成一个客户端的主界面对象,由该对象生成一个客户端对象。
//==========================程序开始=========================// //DBC LoginFrame.class import java.awt.*;
import java.awt.event.*; import javax.swing.*;
public class LoginFrame extends JFrame implements ActionListener {
private JPanel center; private Container mainc; private String username; private String passwords; private int pp; JTextField u; JTextField p; JTextField s;
JTextField serverport; JLabel selectserver; JLabel port; JLabel user; JLabel pass; JButton ok; JButton cancle;
public LoginFrame() {
selectserver = new JLabel(\服务器:\ port = new JLabel(\端 口:\ user = new JLabel(\用户名:\ pass = new JLabel(\密 码:\ ok = new JButton(\确定\ cancle = new JButton(\取消\ u = new JTextField(\ p = new JTextField(\
s = new JTextField(\ serverport = new JTextField(\ mainc = this.getContentPane();
mainc.setLayout(new FlowLayout()); ok.addActionListener(this); cancle.addActionListener(this); u.addActionListener(this); p.addActionListener(this);
s.addActionListener(this);
serverport.addActionListener(this); mainc.add(selectserver); mainc.add(s); mainc.add(port);
mainc.add(serverport); mainc.add(user); mainc.add(u); mainc.add (pass); mainc.add(p); mainc.add(ok); mainc.add(cancle); }
public static void main(String[] args) {
LoginFrame log = new LoginFrame(); log.setSize(250,180); log.setVisible(true);
log.setDefaultCloseOperation(EXIT_ON_CLOSE); log.setResizable(false);
log.setTitle(\VA.BBS.登陆\ }
public void actionPerformed(ActionEvent e) { if
(e.getSource()==ok||e.getSource()==u||e.getSource()==p||e.getSource()==s||e.getSource()==serverport) {
username = this.u.getText(); passwords = this.p.getText();
if (serverport.getText().equals(\ {
pp = 5555; } else
pp = Integer.parseInt(this.serverport.getText()); if (username.equals(\ {
JOptionPane.showMessageDialog(this,\请输入用户名!\信息提示\ return ; }
if(this.checkPass(passwords).equals(new Boolean(true))); {
MainBord mb = new MainBord(600,400,\VA爱好者聊天室 当前用户: \ Thread t1 = new Thread(mb); t1.start();
mb.setVisible(true);
mb.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(false); } }
else if (e.getSource()==cancle) {
this.dispose(); } }
public Boolean checkPass(String pass) {
return new Boolean(true); } }
//==========================程序结束============================//
4.3.4 客户端对象
设计思想:
(1)先总体设计该类,将该类封装为一个客户端,向用户提供连接服务器、接收消息、发送消息等功能。
(2)在连接上服务器后,会创建该类的一个实例,代表一个客户端。利用该客户端进行所有的客户活动。
(3)提供receiveMessage()、sendMessage(Stringmsg)方法,进行接收消息和发送消息。同时在发送消息时进行一些错误控制如不能发送空消息等。
//=============================程序开始=========================// //DBC Client.java import java.io.*; import java.net.*; import javax.swing.*; class Client {
private static int PORT=5555; private Socket s;
private BufferedReader in; private PrintWriter out; private String username; private String servername;
private int port;
JTextArea jTextArea1 = new JTextArea(); JButton jButton1 = new JButton();
public Client(String name,String servername,int port) {
username = name;
this.servername = servername; this.port = port; try {
InetAddress addr = InetAddress.getByName(servername); s = new Socket(addr,port);
JOptionPane.showMessageDialog(new JWindow(),\已连接服务器!\连接成功\TION_MESSAGE);
in = new BufferedReader(new InputStreamReader(s.getInputStream())); out = new PrintWriter(new BufferedWriter(new OutputStreamWriter( s. getOutputStream())), true); out.println(username);
System.out.println(username);
}catch (UnknownHostException ue) {
JOptionPane.showMessageDialog(new JWindow(),\出现错误:未知主机...\聊天错误\ }catch (NullPointerException npe){
JOptionPane.showMessageDialog(new JWindow(),\出现错误:服务器未开启...\连接错误\ }catch (IOException e) { } }
public String receiveMessage() throws Throwable {
try {
while (true) {
if (s.isClosed()) {
throw(new Throwable()); }
String str=\ str =in.readLine(); return str; }
}catch(IOException e) {
System.out.println(\读取数据错误...\ throw(new Throwable());
}catch(Throwable t){
throw(new Throwable()); } }
public void sendMessage(String str) {
if (str.equals(\ {
JOptionPane.showMessageDialog(new JWindow(),\不能发送空消息!\聊天提示\JOptionPane.ERROR_MESSAGE); return; }
out.println(username+\ 说: \ }
public Client() { try {
jbInit(); }
catch(Exception e) { e.printStackTrace(); } }
private void jbInit() throws Exception { jButton1.setText(\ jTextArea1.setText(\ } }
//==============================程序结束=========================//
4.3.5 聊天室主界面
设计思想:
(1)用户登陆成功后的主操作界面,提供聊天信息发送、聊天信息显示、显示在线用户、退出、重登陆、隐身等功能(注意,某些功能未实现,读者可以在此基础上添加)。
(2)在该类主要封闭了聊天信息的具体显示、在线用户的刷新等功能的实现。 (3)注意该线程实现了Runnable接口,提供多线程服务。
//===========================程序开始==========================// //DBC MainBord.java文件 import java.awt.*;
import java.awt.event.*; import javax.swing.*;
public class MainBord extends JFrame implements ActionListener,Runnable {