Register.java文件代码
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;
public class Register extends JFrame implements ActionListener
{
  //声明组件
  JLabel lblHeading;
  JLabel lblUserName;
  JLabel lblUserPwd;
  JLabel lblCnfUserPwd;
  JLabel lblFrstName;
  JLabel lblLstName;
  JLabel lblAge;
  JLabel lblEmpId;
  JLabel lblSex;  String usrName;
  char[] usrPwd;
  char[] cnfPwd;
  String frstName;
  String lstName;
  String age;
  String empid;  Socket toServer;
  ObjectInputStream streamFromServer;
  PrintStream streamToServer;
  JComboBox lstSex;  JTextField txtUserName;
  JPasswordField txtUsrPwd;
  JPasswordField txtCnfUsrPwd;
  JTextField txtFrstName;
  JTextField txtLstName;
  JTextField txtAge;
  JTextField txtEmpId;
  Font f; Color r;
  JButton btnSubmit;
  JButton btnCancel;  public Register()
  {
    this.setTitle("注册界面");
    JPanel panel=new JPanel();
  
    //应用布局管理器
    panel.setLayout(new GridBagLayout());
    GridBagConstraints gbCons=new GridBagConstraints();
    //放置图形组件
    gbCons.gridx=0;
    gbCons.gridy=0;
    lblHeading=new JLabel("注册信息");
    Font f=new Font("Monospaced", Font.BOLD, 24);
    lblHeading.setFont(f);
    Color c=new Color(0,200,0);
    lblHeading.setForeground(new Color(131,25,38));
    lblHeading.setVerticalAlignment(SwingConstants.TOP);
    gbCons.anchor=GridBagConstraints.WEST;
    panel.add(lblHeading, gbCons);    gbCons.gridx=0;
    gbCons.gridy=1;
    lblUserName=new JLabel("用户名称: ");
    gbCons.anchor=GridBagConstraints.WEST;
    panel.add(lblUserName, gbCons);    gbCons.gridx=1;
    gbCons.gridy=1;
    txtUserName=new JTextField(15);
    panel.add(txtUserName, gbCons);    gbCons.gridx=0;
    gbCons.gridy=2;
    lblUserPwd=new JLabel("密码: ");
    panel.add(lblUserPwd, gbCons);    gbCons.gridx=1;
    gbCons.gridy=2;
    txtUsrPwd=new JPasswordField(15);
    panel.add(txtUsrPwd, gbCons);    gbCons.gridx=0;
    gbCons.gridy=3;
    lblCnfUserPwd=new JLabel("确认密码: ");
    panel.add(lblCnfUserPwd, gbCons);    gbCons.gridx=1;
    gbCons.gridy=3;
    txtCnfUsrPwd=new JPasswordField(15);
    panel.add(txtCnfUsrPwd, gbCons);
  
    gbCons.gridx=0;
    gbCons.gridy=4;
    lblEmpId=new JLabel("雇员编号: ");
    panel.add(lblEmpId, gbCons);    gbCons.gridx=1;
    gbCons.gridy=4;
    txtEmpId=new JTextField(15);
    panel.add(txtEmpId, gbCons);    gbCons.gridx=0;
    gbCons.gridy=5;
    lblFrstName=new JLabel("名: ");
    panel.add(lblFrstName, gbCons);    gbCons.gridx=1;
    gbCons.gridy=5;
    txtFrstName=new JTextField(15);
    panel.add(txtFrstName, gbCons);    gbCons.gridx=0;
    gbCons.gridy=6;
    lblLstName=new JLabel("姓: ");
    panel.add(lblLstName, gbCons);    gbCons.gridx=1;
    gbCons.gridy=6;
    txtLstName=new JTextField(15);
    panel.add(txtLstName, gbCons);
  
    gbCons.gridx=0;
    gbCons.gridy=7;
    lblAge=new JLabel("年龄: ");
    panel.add(lblAge, gbCons);
  
    gbCons.gridx=1;
    gbCons.gridy=7;
    txtAge=new JTextField(3);
    panel.add(txtAge, gbCons);    gbCons.gridx=0;
    gbCons.gridy=8;
    lblSex=new JLabel("性别: ");
    panel.add(lblSex, gbCons);    gbCons.gridx=1;
    gbCons.gridy=8;
    String[] sex= {"男", "女"};
    JComboBox lstSex=new JComboBox(sex);
    lstSex.setSelectedIndex(0);
    panel.add(lstSex, gbCons);
    JPanel btnPanel=new JPanel();
  
    btnSubmit=new JButton("提交");
    btnPanel.add(btnSubmit);
    btnSubmit.addActionListener(this);
    //向"提交"按钮添加事件监听器
    btnCancel=new JButton("取消");
    btnPanel.add(btnCancel);
    btnCancel.addActionListener(this);
    //向"取消"按钮添加事件监听器
  
    gbCons.gridx=0;
    gbCons.gridy=9;
    gbCons.anchor=GridBagConstraints.EAST;
    panel.add(btnPanel, gbCons);
  
    getContentPane().add(panel);    setDefaultCloseOperation(EXIT_ON_CLOSE);    setVisible(true);
    setSize(450,400);
  }//Register()结束  public void actionPerformed(ActionEvent e1)
  {
     JButton button=(JButton)e1.getSource();
     //获取事件源
     if(button.equals(btnCancel))
     {
        this.dispose();
     }
     else
     {
        int ver=verify();  //调用verify()方法
        if(ver==1)
        {
           try
           {
             //建立一个Socket连接并创建一个Socket的输入输出流
             toServer = new Socket("wilson",1001);
             streamFromServer = new ObjectInputStream(toServer.getInputStream());
             streamToServer = new PrintStream(toServer.getOutputStream());             //向服务器发送消息进行注册
             streamToServer.println("注册信息");
             usrName = txtUserName.getText();
             usrPwd = txtUsrPwd.getPassword();
             String pwd = new String(usrPwd);
             //向服务器发送用户名和密码
             streamToServer.println(usrName+":"+pwd);
             //读取服务器的响应信息
             String frmServer = (String)streamFromServer.readObject();
             if(frmServer.equals("已注册"))
             {
                 new Login();
                 this.dispose();
             }
             else if(frmServer.equals("用户已存在"))
             {
                 showUsrExists();
                 //显示错误信息
             }
           }// try块结束
           catch(Exception e)
           {
              System.out.println("异常 "+e);
           } 
        }//if 块结束
     }//else 块结束
  }//actionPerformed()函数结束  int verify()  //检验用户信息的正确性
  {
     int ctr=0;
     int intAge = 0;
     try
     {
       usrName = txtUserName.getText();
       usrPwd = txtUsrPwd.getPassword();
       cnfPwd = txtCnfUsrPwd.getPassword();
       frstName = txtFrstName.getText();
       lstName = txtLstName.getText();
       age = txtAge.getText();
       empid = txtEmpId.getText();
       String strUsrPwd = new String(usrPwd);
       String strCnfPwd = new String(cnfPwd);
       try
       {
           intAge = (int)Integer.parseInt(age.trim());
       } 
       catch(Exception e)
       {
           showErrordlgInt();
       } 
       if(
            (usrName.length()>0)&&
            (strUsrPwd.length()>0)&&
            (strCnfPwd.length()>0)&&
            (frstName.length()>0)&&
            (lstName.length()>0)&&
            (intAge>21)&&
            (intAge<58)&&
            (empid.length()>0)&&
            (strUsrPwd.equals(strCnfPwd))  
       )
         {
             ctr = 1;
             return ctr;
         }
         else
         {
             showErrordlg();
         }// else 块结束
     }// try 块结束
     catch(Exception e)
     {
        System.out.println("抛出异常 "+e);
     }// catch 块结束
   return ctr;
  }// verify()函数结束  //错误信息---用户已存在
  void showUsrExists()
  {
      JOptionPane.showMessageDialog(
          this,
          "用户已存在.",
          "错误",
          JOptionPane.ERROR_MESSAGE);
  }  int flg = 0;  //错误信息---非法输入
  void showErrordlg()
  {
     JOptionPane.showMessageDialog(
         this,
         "非法输入.",
         "错误",
         JOptionPane.ERROR_MESSAGE);
  }  //错误信息---非法年龄
  void showErrordlgInt()
  {
     JOptionPane.showMessageDialog(
         this,
         "年龄不正确.",
         "错误",
         JOptionPane.ERROR_MESSAGE);
  }  public static void main(String args[])
  {
     new Register();
  }}//end of class

解决方案 »

  1.   

    clientInt.java文件代码
    import java.io.*;
    import java.net.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.util.*;
    import javax.swing.Timer;public class clientInt extends JFrame implements ActionListener
    {
       Timer t=new Timer(5000,new TimerAction());
       String usr_name;
       public String remUser;
       class TimerAction implements ActionListener
       {
          Socket toServer;
          ObjectInputStream streamFromServer;
          PrintStream streamToServer;
          public void actionPerformed(ActionEvent e2)
          {
             try
             {
                toServer = new Socket("wilson",1001);
                streamFromServer = new ObjectInputStream(toServer.getInputStream());
                streamToServer = new PrintStream(toServer.getOutputStream());
                message = txtMsg.getText();
                
                //send a message to the server
                streamToServer.println("From Timer");            //receive vectors from the server
                Vector vector = (Vector)streamFromServer.readObject();
                Vector vector1 = (Vector)streamFromServer.readObject();
                
                txtListUsers.setText(" ");
                for(int j = 1;j<vector1.capacity(); j++)
                {
                   txtListUsers.append((String)vector1.elementAt(j));
                   txtListUsers.append("\n");
                }
                 
                 //show the messages
                 int i = messageCount;
                for(;i<vector.capacity();i++)
                {
                   txtMessages.append((String)vector.elementAt(i));
                   txtMessages.append("\n");
                }
                 messageCount = i;
             }//end of try         catch(Exception e)
             {
                System.out.println("Exception "+e);
             }
          }//end of actionPerformed
       }//end of TimerListener class   int messageCount = 0;
       String name;
       PrintStream streamToServer;
       ObjectInputStream streamFromServer;
       Socket toServer;
       JTextArea txtMessages;
       JTextArea txtListUsers;
       JTextField txtMsg;
       JButton msgSendBtn;
       JButton userLoginBtn;
       JButton userRegisterBtn;
       JButton userLogoutBtn;   JLabel lblChatRoom;
       JLabel lblUserList;   JScrollPane jspSendMsgPane;
       JScrollPane jspTxtMsgPane;
       JScrollPane jspUserListPane;   JTextField textWriteMsg;
       String message;
       int nSend;
      

  2.   

    续上面的clientInt文件 public clientInt(String nm)
       {
          remUser = nm;
          usr_name = nm;
          this.setTitle("FunChat: "+usr_name); //set the title name
          JPanel panel = new JPanel();
          panel.setLayout(new GridBagLayout());
          GridBagConstraints gbCons = new GridBagConstraints();
      
          gbCons.gridx = 0;
          gbCons.gridy = 0;
          lblChatRoom = new JLabel("Chat Room", SwingConstants.LEFT);
          panel.add(lblChatRoom, gbCons);      gbCons.gridx = 1;
          gbCons.gridy = 0;      lblUserList = new JLabel("Online Users", SwingConstants.LEFT);
          panel.add(lblUserList, gbCons);
       
          gbCons.gridx = 0;
          gbCons.gridy = 1;
          gbCons.gridwidth = 1;
          gbCons.gridheight = 1;
          gbCons.weightx = 1.0;
          gbCons.weighty = 1.0;
          txtMessages = new JTextArea(25,35);
          txtMessages.setEditable(false);
          jspTxtMsgPane = new JScrollPane(txtMessages,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
          panel.add(jspTxtMsgPane, gbCons);
        
          gbCons.gridx = 1;
          gbCons.gridy = 1;
          gbCons.gridwidth = 1;
          gbCons.gridheight = 1;
          gbCons.weightx = 1.0;
          gbCons.weighty = 1.0;
          txtListUsers = new JTextArea(25,10);
          txtListUsers.setEditable(false);
          jspUserListPane = new JScrollPane(txtListUsers,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
          panel.add(jspUserListPane, gbCons);
     
          gbCons.gridx = 0;
          gbCons.gridy = 2;
          gbCons.gridwidth = 1;
          gbCons.gridheight = 1;
          gbCons.weightx = 1.0;
          gbCons.weighty = 1.0;
          txtMsg = new JTextField(35);      jspSendMsgPane = new JScrollPane(txtMsg,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
          panel.add(jspSendMsgPane, gbCons);
     
          gbCons.gridx = 1;
          gbCons.gridy = 2;
          gbCons.gridwidth = 1;
          gbCons.gridheight = 1;
          gbCons.weightx = 1.0;
          gbCons.weighty = 1.0;
          gbCons.anchor = GridBagConstraints.WEST;
          msgSendBtn = new JButton("Send");
          panel.add(msgSendBtn, gbCons);
         
          msgSendBtn.addActionListener(this);
          JPanel btnPanel = new JPanel();
          userLogoutBtn = new JButton("Logout"); 
          userLogoutBtn.addActionListener(this);      //add a listener to the window
             this.addWindowListener(
                           new WindowAdapter()
                               {
                               public void windowClosing(WindowEvent e1)
                                        {
                                             try
                                             {
                                                 Socket toServer;
                                                ObjectInputStream streamFromServer;
                                                PrintStream streamToServer;
                                                toServer = new Socket("wilson",1001);
                                                streamToServer = new PrintStream(toServer.getOutputStream());
                                                streamToServer.println("User Logout");
                                                streamToServer.println(remUser);
                                             }//end of try
                                             catch(Exception e2)
                                             {
                                                 System.out.println("Exception Occured: "+e2);
                                             }
                                        
                                         }
                               }
                        );
                   
          btnPanel.add(userLogoutBtn);
          gbCons.gridx = 0;
          gbCons.gridy = 3;
          gbCons.gridwidth = 1;
          gbCons.gridheight = 1;
          gbCons.weightx = 1.0;
          gbCons.weighty = 1.0;
          gbCons.anchor = GridBagConstraints.EAST;
          gbCons.fill = GridBagConstraints.HORIZONTAL;
          panel.add(btnPanel, gbCons);
          getContentPane().add(panel);
          setDefaultCloseOperation(EXIT_ON_CLOSE);     
          setVisible(true);
          setSize(546,567);
          t.start();   
       }//end of clientInt()   public void actionPerformed(ActionEvent e1)
       {
           JButton button = (JButton)e1.getSource();
     
           //if logout button clicked
           if(button.equals(userLogoutBtn))
           {
                try
                {
                    toServer = new Socket("wilson",1001);
                    streamToServer = new PrintStream(toServer.getOutputStream());
               
                    //send a msg to server for logging out
                    streamToServer.println("User Logout");
                    streamToServer.println(remUser);
                }
                catch(Exception e)
                {
                    System.out.println("Exception Occured: "+e);
                }
                this.dispose();
           }
           //else if Send button is clicked
           else
           {
                int num1 = 0,num2 = 0,res = 0;
                String name = " ";
                try
                {
                    toServer = new Socket("wilson",1001);
                    streamFromServer = new ObjectInputStream(toServer.getInputStream());
                    streamToServer = new PrintStream(toServer.getOutputStream());
                    message = txtMsg.getText();
                    String msg = message;                //send the username and msg typedto the server
                    streamToServer.println(usr_name+":"+msg); 
                    txtMsg.setText(" ");
          
                    //read the reply from the server
                    Vector vector = (Vector)streamFromServer.readObject();
                    int i = messageCount;
                    for(;i<vector.capacity();i++)
                    {
                         txtMessages.append((String)vector.elementAt(i)); //display the messages
                         // txtMessages.append("\n");
                    }//end of for
                    messageCount = i;
                }//end of try
                catch(Exception e)
                {
                    System.out.println("Exception Occurred: "+e);
                }            
           }//end of else   }//end of actionPerformed()   public static void main(String args[])
       {
           String nm = new String();
           clientInt CI = new clientInt(nm);
       }
    }//end of class
      

  3.   

    代码太多了,看不下去,建议把你的问题说清除就可以了
    聊天室是基于socket的编程,建议先了解下socket原理,这对你理解这些代码有帮助。
    new Socket("wilson",1001); 它是通过1001端口创建一个对象。端口可以自己指定,只要不于其他端口冲突就可以了。那它的用户名和密码是怎么保存的? java是基于对象的编程,你new一个对象之后,它就在内存中创建一个对象,对象中包含用户的信息。因此,用户名和密码只在运行期间有效。它是保存在内存中的
      

  4.   

    你得先启动服务端程序,开始侦听某个端口的连接(等待客户端启动线程连接),你这里侦听的是1001号端口。(客户端也必需要通过1001号端口才能与服务器端取得连接。到于toServer=new Socket("wilson",1001); wilson是我的电脑名,但是不明白1001这个端口号嘛,这个端口号是自行指定的(但好像最好在1024以上,以避免和其它系统用的端口冲突)。楼主最好查一下Java的API,有详细介绍:
    Socketpublic Socket(String host, int port) throws UnknownHostException, IOException    创建一个流套接字并将其连接到指定主机上的指定端口号。    如果指定的主机为 null,则等效于指定与 InetAddress.getByName(null) 相同的地址。换句话话,等效于指定回送接口的地址。    如果应用程序已指定服务器套接字工厂,则调用该工厂的 createSocketImpl 方法来创建实际套接字实现。否则创建“普通”套接字。    如果有安全管理器,则使用主机地址和 port 作为参数调用其 checkConnect 方法。这可能会导致 SecurityException 异常。    参数:
            host - 主机名,或者为 null,表示回送地址。
            port - 端口号。 
        抛出:
            UnknownHostException - 如果无法确定主机的 IP 地址。 
            IOException - 如果创建套接字时发生 I/O 错误。 
            SecurityException - 如果安全管理器存在并且其 checkConnect 方法不允许进行该操作。它没有用到数据库,那它的用户名和密码是怎么保存的,保存在那里呢???
    看你的程序,应该是存放在流中(Stream)了……
      

  5.   

    AppServer.java文件代码
    //import classes
    import java.io.*;
    import java.net.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.util.*;
    import javax.swing.Timer.*;//Code for the AppServer classpublic class AppServer implements Runnable
    {
       ServerSocket server;
       Socket fromClient;
       Thread serverThread;   public AppServer()
       {
          System.out.print("FunChat server started..........");
          try
          {
             server = new ServerSocket(1001);
             serverThread = new Thread(this);
             serverThread.start();
          }
          catch(Exception e)
          {
             System.out.println("Cannot start the thread: " + e);
          }
       }//end of AppServer()   public static void main(String args[])
       {
          new AppServer();
       }   public void run()
       {
          try
          {
             while(true)
             {
                //Listening to the clients request
                fromClient = server.accept();
                //Creating the connect object
                Connect con = new Connect(fromClient);
             }
          }
          catch(Exception e)
          {
             System.out.println("Cannot listen to the client: " + e);
          }
       }//end of run}//end of Appserver class//Code for the connect class
    class Connect
    {
      ObjectOutputStream streamToClient;
      int ctr = 0;  BufferedReader streamFromClient;
      static Vector vector;
      static Vector vctrList;
      String mesg = " ";
      static String str = new String("UsrList");
      
      static
      {
         vector = new Vector(1,1);
         vctrList = new Vector(1,1);
         vctrList.addElement((String)str);
      }  int verify(String mesg)
      {
         try
         {
            RandomAccessFile RAS = new RandomAccessFile("UsrPwd.txt", "r");
            int i = 0;
            String str = " ";
            while((RAS.getFilePointer())!=(RAS.length()))
            {
               str = RAS.readLine();
               if(str.equals(mesg))
               {
                  ctr = 1;
                  break;
               }
            } //end of while
            RAS.close();
         } //end of try
         catch(Exception e)
         {
            System.out.print("Exception Occurred: "+e);
         }
         return ctr;
      } //end of verify()  int checkFile(String mesg)
      {
         int chk = 1;
         try
         {
            RandomAccessFile RS = new RandomAccessFile("UsrPwd.txt", "r");
            int i = 0;
            String str = " ";
            String colon = new String(":");
            int index = ((String)mesg).lastIndexOf(colon);
            String userName = (String)mesg.substring(0,index);
            while((RS.getFilePointer())!=(int)(RS.length()))
            {
               str = RS.readLine();
               int index1 = ((String)str).lastIndexOf(colon);
               String usrName = (String)str.substring(0,index1);
               if(usrName.equals(userName))
               {
                  chk = 0;
                  break;
               }
            }//end of while
            RS.close();
         }//end of try
         catch(Exception e)
         {
            System.out.print("Exception Occurred: "+e);
         }  
         return chk;
      }//end of chkFile  public Connect(Socket inFromClient)
      {
         //Retrieving the clients stream
         String msg = " ";
         String message = " ";
         try
         {
            streamFromClient = new BufferedReader(new InputStreamReader(inFromClient.getInputStream()));
            streamToClient = new ObjectOutputStream(inFromClient.getOutputStream());        msg = streamFromClient.readLine();
            if((msg.equals("From Timer")))
            {
               streamToClient.writeObject(vector);
               streamToClient.writeObject(vctrList);
            }
            else if(msg.equals("LoginInfo"))
            {
               msg = streamFromClient.readLine();
               int ver = verify(msg);
               if(ver==1)
               {
                   String colon = new String(":");
                   int index = ((String)msg).lastIndexOf(colon);
                   String userName = (String)msg.substring(0,index);
                   if(!(vctrList.indexOf((String)userName)>0))
                   {
                      streamToClient.writeObject("Welcome");
                      
                      vctrList.addElement((String)userName);
                   }
               }
               else
               {
                  streamToClient.writeObject("Login denied");
               }
            }
            else if(msg.equals("RegisterInfo"))
            {
               msg = streamFromClient.readLine();
               int ret = checkFile(msg);
               if(ret==0)
               {
                  FileOutputStream out = new FileOutputStream("UsrPwd.txt",true);
                  PrintStream p = new PrintStream(out);
                  p.println();
                  p.println(msg);
                  p.close();
                  streamToClient.writeObject("Registered");
               }
            }
            else if(msg.equals("User Logout"))
            {
               String remUser = streamFromClient.readLine();
               boolean b = vctrList.removeElement((String)remUser);
            } 
            else
            {
               message = message+msg;
               vector.addElement((String)message);
               streamToClient.writeObject(vector);
            }
         }//end of try
         catch(Exception e)
         {
            System.out.println("Cannot get the client stream connect" + e);
         }
         finally
         {
             try
             {
                 inFromClient.close();
             }
             catch(IOException e)
             {
                 System.out.print("Exception Occurred: "+e);
             }
         }
      
      }//end of Connect()
    }