1.客户端通过键盘录入用户名
2.服务端对用户名进行校验:如果该用户存在,服务端显示“XXX,已登录”,并在客户端显示“XXX,欢迎登录”
如果该用户不存在,服务端显示“XXX,尝试登录”,并在客户端显示“XXX,该用户不存在”
3.每个用户最多登录三次
代码如下:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class LoginClient {
public static void main(String[] args) throws IOException {
//1.创建socket对象,指明服务器端的ip和端口号
Socket s = new Socket("127.0.0.1", 10085);//客户端:本机地址,对应端口
//键盘键入 处理流用于键盘的键入
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
//输出 打印输出流
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
//输入
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
//三次输入的机会
for (int i = 0; i <3 ; i++) {
String line= bufr.readLine();//一次读一行
if (line==null)
break;
out.println(line);
String info = in.readLine();
if (info.contains("exit")) break;//键入exit退出
System.out.println("info:"+info);
}
bufr.close();
s.close();
}
}
//共同实现这个线程
class ServerThread implements Runnable{
private Socket s;
public ServerThread(Socket s){
this.s=s;
}
@Override
public void run() {
String ip = s.getInetAddress().getHostAddress();
try {
for (int i = 0; i < 3; i++) {
BufferedReader bufr = new BufferedReader(new FileReader("d:\\IO\\haha.txt"));
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
//打印流的 getOutputStream输流用于输出数据socket中的数据
PrintWriter out = new PrintWriter(s.getOutputStream(), true);
String line=null;
String name=in.readLine();//是键入的数据
boolean flag=false;
while ((line= bufr.readLine())!=null){
if (name.equals(line)){
flag=true;
break;//三次机会输入与已知文件内容保持一致则成功
}
}
if (flag){
System.out.println(name+"已登录");
out.println(name+"欢迎登录");
break;
}else {
System.out.println(name+"尝试登录");
out.println(name+"该用户不存在");
}
bufr.close();
}
s.close();
}catch (Exception e){
throw new RuntimeException(ip+"效验失败");
}
}
}
class LoginServer{
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(10085);//实例化一个服务器端的socket
while (true){
Socket s = ss.accept();//用于接收服务端的内容
ServerThread a = new ServerThread(s);//实例化实现接口的线程
Thread t = new Thread(a);
t.start();//开启线程
}
}
}
在目标盘下的文件:
运行结果:
客户端: