java客户端、服务的小练习

TCP客户端并发登录
要求:
客户端通过键盘录入用户名。服务端对这个用户名进行校验。
如果该用户存在,在服务端显示xxx,已登陆。并在客户端显示 xxx,欢迎光临。
如果该用户不存在,在服务端显示xxx,尝试登陆。并在客户端显示 xxx,该用户不存在。最多就登录三次。

客户端代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {
	public static void main(String[] args) throws IOException {
		//客户端套接字
		Socket s = new Socket("127.0.0.1",8888);
		
		//带缓冲的reader   获得键盘输入
		BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
		//printwriter    往服务端写内容
		PrintWriter out = new PrintWriter(s.getOutputStream(),true);
		
		//s.getInputStream() 获得服务端的响应
		BufferedReader bufi = 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 = bufi.readLine();
			System.out.println("info:" + info);
			if(info.contains("欢迎")) {
				break;
			}
		}
		bufr.close();
		s.close();
		
		
	}
}

服务端代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

class UserThread implements Runnable{
	private Socket s;
	
	public UserThread(Socket s) {
		this.s = s;
	}

	@Override
	public void run() {
		//获取ip
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip + "....连接进来");
		
		try {
			int i = 0;
			while((i++) <= 2) {
				//获得客户端写的用户名
				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) {
					//line是读取txt的名字
					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 e) {
			System.out.println(e.getMessage());
			throw new RuntimeException("校验失败");
		}
	}
	
}

public class Server {
	public static void main(String[] args) throws IOException {
		//服务端套接字
		ServerSocket ss = new ServerSocket(8888);
		
		while(true) {
			Socket s = ss.accept();
			new Thread(new UserThread(s)).start();
		}
	}
}

最后:

         需要创建一个user.txt文档来存储用户的姓名。因为该程序没有注册功能,所以user.txt文档中

必须提前存储姓名,否则程序没法使用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值