C/S 模式用户登录,同名验证如何解决

Pbingbing 2011-07-19 11:45:17
主要目的是防止同一用户登录多次和在多处登录的情况,
我写的是一个群聊天的小软件,有用户登录界面,客户端和一个服务器,首先服务器启动,然后登录(要在数据库中验证),如果登录成功,就可以进入客户端,但是现在同一个用户可以登录多处,不知如何解决。
...全文
142 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pbingbing 2011-08-13
  • 打赏
  • 举报
回复
非常感谢!
windyfzz 2011-08-02
  • 打赏
  • 举报
回复
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消息来判断是否重名。
zl3450341 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 alexandertech 的回复:]

有后登陆的,就踢掉前面登陆的
[/Quote]
++
bolink5 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 alexandertech 的回复:]
有后登陆的,就踢掉前面登陆的
[/Quote]

这点和QQ 是一样的
飞跃颠峰 2011-07-20
  • 打赏
  • 举报
回复
有后登陆的,就踢掉前面登陆的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧