/*TCP-客户端多线程并发登陆服务端
客户端通过键盘录入用户名。
服务端对这个用户名进行校验.
如果该用户存在,在服务端显示xxx,已登陆
并在客户端显示xxx,欢迎光临.
如果该用户不存在,在服务端显示xxx,尝试登陆.
并在客户端显示xxx,该用户不存在.
最多就登录三次.
*/
class UserLogin
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket("192.168.1.254",10008);
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//键盘
PrintWriter out = new PrintWriter(s.getOutputStream().true);//s输出,自动刷新
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));//s输入
for (int x = 0;x<3 ;x++ )//最多就登录三次
{
String line = bufr.readLine();//键盘到line
if (line==null)
break;
out.println(line);//line到out到s输出
String info = bufIn.readLine();
System.out.println("info:"info);
if (info.contains("欢迎"))//info包含"欢迎",表示用户存在于用户列表中
break;
}
bufr.close();
s.close();
}
}
class UserThread implements Runnable//用户线程
{
private Socket s;//客户端s要定义为成员
UserThread(Socket s)//做构造器,客户端s放进参数
{
this.s = s;
}
public void run()//run()方法,用start()开启线程
{
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"...connected");
try
{
for (int x = 0;x<3 ;x++ )
{
BufferedReader bufIn = new BufferedReader(new InputStream(s.getInputStream()));//拿到客户端s输入的用户名
String name = bufIn.readLine);
if (name==null)
break;
BufferedReader bufr = new BufferedReader(new FileReader("user.txt"));//从指定文件中读取用户列表,来比较
PrintWriter out = new PrintWriter(s.getOutputStream(),true);//s输出流,自动刷新
String line = null;
boolean flag = false;
while ((line = bufr.readLine())!=null)//缓冲流读到文件结尾
{
if (line.equals(name))//找到文件中匹配的用户名
{
flag = 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+"校验失败");
}
}
}
class UserServer
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(10008);
while (true)//多线程,循环要一直开启,用true
{
Socket s = ss.accept();//拿 客户端s
new Thread(new UserThread(s)).start();//start()开线程,客户端s当做用户线程UserThread()的构造参数扔进来
}
}
}
TCP-客户端多线程并发登陆服务端
最新推荐文章于 2024-06-12 17:04:58 发布