需求
客户端通过键盘录入用户名,服务端对这个用户名进行校验。
如果该用户存在,在服务端显示:XXX,已登录,并在客户端显示:XXX,欢迎光临。
如果该用户不存在,在服务端显示:XXX,尝试登录,并在客户端显示:XXX,该用户不存在。
限制最多登录三次。
编码
import java.net.*;
import java.io.*;
class LoginClient{ // 客户端
public static void main(String[] args)throws Exception{
Socket s=new Socket("192.168.0.111",10008);
// 源
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
// 目的
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 UserThread implements Runnable{ // 登录处理请求
private Socket s;
UserThread(Socket s){
this.s=s;
}
public void run(){
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+" is 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;
// 读取已存在目的文件信息
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;
break;
}
}
// 判断验证结果
if(flag){
System.out.println(name+" 已登录");
out.println(name+" 欢迎光临!");
}else{
System.out.println(name+" 尝试登录");
out.println(name+" 用户名不存在");
}
}
// 关闭资源
s.close();
}catch(Exception ex){
throw new RuntimeException(ip+"校验失败!");
}
}
}
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();
}
}
}