C/S 模式用户登录,同名验证如何解决 主要目的是防止同一用户登录多次和在多处登录的情况, 我写的是一个群聊天的小软件,有用户登录界面,客户端和一个服务器,首先服务器启动,然后登录(要在数据库中验证),如果登录成功,就可以进入客户端,但是现在同一个用户可以登录多处,不知如何解决。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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消息来判断是否重名。 为什么我这里按钮不能设置大小啊,求指教 求助!!!!我是初学java者 看不懂下面的 如何让一个图形移动并且不受重绘的影响呢? 数组的问题,这个程序麻烦各位帮我看以下,看了半天都不知道哪里有问题... 为什么会在编写程序的时候出现乱码? 只要一个简单的分页第三方没想到这么难啊 请教:Mac机上测试java内存泄漏的工具有哪些? 为什么已删除数据表所有记录,但Hibernate查出来还是原来的记录呢? 请问如何将.class发布为.exe? 哪里可以下载到java API的完全文档? java不同窗体间的值传递问题。。。吐血跪求。。 关于执行JAVA线程任务时出现异常后线程挂掉问题
{
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消息来判断是否重名。