TCP/ip实现客户端并发登录

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();//开启线程


        }
    }
}

在目标盘下的文件:

运行结果:

客户端:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值