黑马程序员技术交流社区
标题:
网络编程——客户端并发登录
[打印本页]
作者:
chenguoyu520
时间:
2015-10-7 16:50
标题:
网络编程——客户端并发登录
客户端通过键盘录入用户名,服务端对这个用户名进行校验。
如果该用户存在,在服务端显示xxx,已登陆;并在客户端显示xxx,欢迎光临。
如果用户不存在,在服务端显示xxx,尝试登陆;并在客户端显示xxx,该用户不存在。
最多就登录三次。
import java.io.*;
import java.net.*;
//客户端
class LoginClient
{
public static void main(String[] args) throws Exception
{
//创建服务
Socket s = new Socket("localhost",10008);
//键盘录入
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
//用socket服务输出流写入数据
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
for(int x=0;x<3;x++)
{
String line = bufr.readLine();//读取键盘录入
if(line==null)
break;
out.println(line);
String info = bufIn.readLine();//将数据写入流中
System.out.println("info:"+info);
if(info.contains("欢迎"))
break;
}
bufr.close();
s.close();
}
}
//服务端
class LoginServer
{
public static void main(String[] args) throws Exception
{ //创建服务,监听端口
ServerSocket ss = new ServerSocket(10008);
while(true)
{
//获取客户端对象
Socket s = ss.accept();
//客户端执行线程
new Thread(new UserThread(s)).start();
}
}
}
//用多线程实现并发登录
class UserThread implements Runnable
{
private Socket s;
UserThread(Socket s)
{
this.s = s;
}
public void run()
{ //获取客户端ip
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"...connected");
try
{
for(int x=0;x<3;x++)
{
//通过客户端读取流读取数据
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
String name = bufIn.readLine();//读取客户端数据
if(name==null)//如果客户端没有发送数据,则跳出循环
break;
//读取user.txt中的数据
BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
String line = null;
boolean flag = false;//设置标记
//读取用户数据
while((line=bufr.readLine())!=null)
{
if(line.equals(name))
{
flag = true;//如果用户名存在,将标记设为true
break;
}
}
if(flag)
{
System.out.println(name+",已登录");
out.println(name+",欢迎光临");
break;
}
else
{
System.out.println(name+",尝试登录");
out.println(name+"用户名不存在");
}
}
s.close();
}
catch (Exception e)
{
throw new RuntimeException(ip+"校验失败");
}
}
}
复制代码
作者:
fmi110
时间:
2015-10-7 20:53
学习了 我觉得用户名和密码当成键值对 用Properties集合来存储 更方便查询和存储
Properties可以跟IO结合使用 挺方便
作者:
哈哈我赢了
时间:
2015-10-7 22:19
学到了。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2