Socket的基础编程(二)

1.Socket实现多客户端用户登陆

对于多用户自然就需要用到多线程去处理了,因而需要在服务器端创建一个专门负责监听的应用主服务程序、一个专门负责响应的线程程序。

实现步骤:
1.创建服务器端线程类,run()方法中实现对一个请求的响应处理。
2.修改服务端的代码,实现一直监听状态。
3.服务器端每监听到一个请求,创建一个线程对象,启动。

2.服务端实现代码

public class LoginThread extends Thread {
	Socket socket = null;

	// 每启动一个线程,连接对应的Socket
	public LoginThread(Socket socket) {
		this.socket = socket;
	}

	@Override
	public void run() {
		super.run();
		try {
			InputStream is = socket.getInputStream();
			OutputStream os = socket.getOutputStream();
			ObjectInputStream ois = new ObjectInputStream(is);
			UserBean user = (UserBean) ois.readObject();
			if (user != null) {
				System.out.println("我是服务器,客户登录信息是:" + user.getName() + ",密码是:" + user.getPassword());
			}
			String reply = "欢迎" + user.getName() + ",登陆成功";
			os.write(reply.getBytes());
			ois.close();
			os.close();
			is.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		try {
			ServerSocket serverSocket = new ServerSocket(8800);
			Socket socket = null;
			while (true) {
				socket = serverSocket.accept();
				LoginThread thread = new LoginThread(socket);
				thread.start();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

3.客户端代码

相比第一节有所修改
public class UserClient {
	private static String name;
	private static String pwd;

	public static void main(String[] args) {
		try {
			Socket socket = new Socket("localhost", 8800);
			OutputStream os = socket.getOutputStream();
			InputStream is = socket.getInputStream();
			ObjectOutputStream oos = new ObjectOutputStream(os);
			// 如果有登陆界面 登陆信息直接从界面获取
			Scanner scanner = new Scanner(System.in);
			System.out.println("请输入用户名:");
			name = scanner.nextLine();
			System.out.println("请输入密码:");
			pwd = scanner.nextLine();
			UserClient user = new UserClient();
			UserBean bean = user.getUserInfo(name, pwd);
			oos.writeObject(bean);
			socket.shutdownOutput();
			// 接收服务器端的响应
			String reply = null;
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			while ((reply = br.readLine()) != null) {
				System.out.println("我是客户端,服务器的响应是:" + reply);
			}
			scanner.close();
			os.close();
			is.close();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 验证是否有此用户
	 * 
	 * @param name
	 * @param pwd
	 */
	public UserBean getUserInfo(String name, String pwd) {
		// UserDao操作验证用户(此处省略)
		// 由于没有数据库 所以此处需要将用户信息暂时放在bean当中
		UserBean user = new UserBean(name, pwd);
		user.setName(name);
		user.setPassword(pwd);
		return user;
	}
}







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值