主要目的是防止同一用户登录多次和在多处登录的情况,
    我写的是一个群聊天的小软件,有用户登录界面,客户端和一个服务器,首先服务器启动,然后登录(要在数据库中验证),如果登录成功,就可以进入客户端,但是现在同一个用户可以登录多处,不知如何解决。

解决方案 »

  1.   

    LZ的这个群聊小软件我以前也写过。你要的话留下个联系方式,共同学习。我写那个小软时也考虑到了这个问题,对于你提出的问题,我当时的解决方法如下: private void landingToServer()//登录事件
    {
      socket=new Socket();
      socket.connect(new InetSocketAddress(InetAddress.getByName(IP),sportNumber),15*1000); if(socket.isConnected())
     {
         sendLandingMessage();//向服务器发送登录信息
     }
    }//向服务器发送登陆信息
     private void sendLandingMessage()
     {
     try
     {
     os=socket.getOutputStream();
     ps=new PrintStream(os);
     
     String newUserName=nameField.getText();

     sendMSGToServer("landingMSG"+","+newUserName);

     }
     catch(Exception ex)
     {
     ex.printStackTrace();
     }
     }
    当服务器端接收到landingMSG类型的消息:
    public void run()
    {
      clientInformation=getInformation();//得到客户端发来的消息
      MSGStyle=clientInformation.split(",")[0];

     if(MSGStyle.equals("landingMSG"))//判断得到的消息类型
    {
    name=clientInformation.split(",")[1];

    if(checkReName(name)==true)//检查用户列表中是否存在相同的用户名
    {
    ps.println("ReName");
    return;
    }
            else
    {
             doc.insertString(doc.getLength(), separate+name+" 登陆服务器成功"+separate+separate, null);
    serverSystem.text.setCaretPosition(doc.getLength());
    notifyNewUserComing();
            }

    }}
    public boolean checkReName(String name)//检查重名
    {

       for(int i=0;i<serverSystem.list.getItemCount();i++)
      {
    if(name.equals(serverSystem.list.getItem(i)))
    {
       isHaveReName=true;

       break;
    }
      }


      return isHaveReName;
    }服务器检测到新用户登陆发来的登陆消息,当检测到有重名的时候向客户端发送ReName类型的消息,那么当客户端收到这个消息是说明重名了。你可以根据客户端是否接收到了ReName消息来判断是否重名。