美文网首页
day24-03-网络编程(TCP-客户端并发登录)

day24-03-网络编程(TCP-客户端并发登录)

作者: 姗婷 | 来源:发表于2020-09-07 23:17 被阅读0次
import javax.xml.ws.Service;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.file.attribute.UserPrincipalLookupService;

/*
客户端通过键盘录入用户名。服务端对这个用户名进行校验
如果该用户存在,在服务端显示xxx,已登录。并在客户端显示xxx,欢迎光临。

如果该用户存在,在服务端显示xxx,尝试登录。并在客户端显示xxx,该用户不存在

最多就登录三次
 */
class LoginClient
{
    public static void main(String[] args) throws Exception
    {

        Socket s = new Socket("192.168.1.13",1005);

//      读取键盘录入
        BufferedReader bfr =
                new BufferedReader(new InputStreamReader(System.in));
//      客户端写出数据
        PrintWriter out = new PrintWriter(s.getOutputStream(),true);
//        BufferedWriter bfrout =
//                new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

//      读取服务端返回来的数据
        BufferedReader bfrin = new BufferedReader(new InputStreamReader(s.getInputStream()));

        for (int i = 0; i <3 ; i++)
        {
            String line = bfr.readLine();
//            键盘录入按Ctrl+c
            if (line==null)
                break;
            System.out.println(line);

            out.write(line);
            String info = bfrin.readLine();

//            服务端说啥
            System.out.println("info"+info);
//            已经登录的用户
            if (info.contains("欢迎"))
                break;

        }
        bfr.close();
        s.close();
    }
}

class User implements Runnable
{
    private Socket s;
    User(Socket s)
    {
        this.s = s;
    }
    @Override
    public void run()
    {
        String ip = s.getInetAddress().getHostAddress();
        System.out.println(ip+"....connected");
        try
        {
            for (int i = 0; i < 3; i++)
            {
               BufferedReader bfrin =
                       new BufferedReader(new InputStreamReader(s.getInputStream()));
               String name = bfrin.readLine();
               if(name ==null)
                   break;

               BufferedReader bfr =
                       new BufferedReader(new FileReader("user.txt"));

               PrintWriter out = new PrintWriter(s.getOutputStream(),true);
    //                BufferedWriter bfrout =
    //                        new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

                    Boolean flag = false;
               String line = null;
           while ((line = bfr.readLine())!=null)
           {
               if (line.equals(name))
               {
                   flag = true;
               }

               if (flag=true)
               {
                   System.out.println(name+",已登录。");
                   out.print(name+",欢迎光临。");
//                   三次循环
                   break;
               }
               else
               {
                   System.out.println(name+",尝试登录");
                   out.print(name+",用户名不存在");
               }
           }
            s.close();
            }
        } catch (Exception e)
        {
            throw new RuntimeException(ip+"校验失败");
        }

    }
}

class LoginService
{
    public static void main(String[] args) throws Exception
    {
        ServerSocket ss = new ServerSocket(1005);

        while (true)
        {
            Socket s= ss.accept();

            new Thread(new User(s)).start();
        }

    }
}

相关文章

网友评论

      本文标题:day24-03-网络编程(TCP-客户端并发登录)

      本文链接:https://www.haomeiwen.com/subject/ffmrektx.html