网络编程--实现用户登录验证功能
2016-07-16 13:44
495 查看
网络编程--实现用户登录验证功能
客户器端:
服务器端:
//User类: package com.bjsxt.net.tcp3; import java.io.Serializable; public class User implements Serializable{ //serialVersionUID序列化ID------易错点 private static final long serialVersionUID = 1L; private String username; private String password; public User() { super(); } public User(String username, String password) { super(); this.username = username; this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
客户器端:
package com.bjsxt.net.tcp3; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.ObjectOutputStream; import java.net.Socket; import java.net.UnknownHostException; /** * 客户端 * @author Administrator * */ public class LoginClient { public static void main(String[] args) { //声明socket套接字 Socket client = null; boolean flag ; try { //创建socket套接字 client = new Socket("127.0.0.1",7788); //创建输入流,用于接收用户输入 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //用于向服务器端发送数据 ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream()); //用于接收服务器端反馈数据 DataInputStream dis = new DataInputStream(client.getInputStream()); while(true){ System.out.print("请输入用户名:"); String username = br.readLine(); System.out.print("请输入密码:"); String password = br.readLine(); //封装数据,准备向服务器端发送 User user = new User(username, password); //发送 oos.writeObject(user); //接收服务器端反馈 flag = dis.readBoolean(); if(flag){ System.out.println(username + "登录成功!"); break; }else{ System.out.println("登录失败,请重新登录:"); } } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if(client != null){ try { client.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
服务器端:
package com.bjsxt.net.tcp3; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; /** * 服务器端 * * 多线程 * 注意:服务器端和客户端包名要相同,所用的User类也要相同 * @author Administrator * */ public class LoginServer { public static void main(String[] args) { ServerSocket server = null; Socket client = null; try { //创建套接字 server = new ServerSocket(7788); //实现多线程,多次接受客户端请求 while(true){ client = server.accept(); System.out.println(client.getInetAddress().getHostName() + "连接成功"); ServerRunnable sr = new ServerRunnable(client); new Thread(sr).start(); } } catch (IOException e) { e.printStackTrace(); } finally{ if(client != null){ try { client.close(); } catch (IOException e) { e.printStackTrace(); } } if(server != null){ try { server.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
package com.bjsxt.net.tcp3; import java.io.DataOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.net.Socket; //服务器端实现runnable接口的类 public class ServerRunnable implements Runnable { private Socket client; public ServerRunnable(Socket client){ this.client = client; } @Override public void run() { try{ boolean flag = false; //用于接收客户端发送的数据 ObjectInputStream ois = new ObjectInputStream(client.getInputStream()); //用于向客户端发送反馈数据 DataOutputStream dos = new DataOutputStream(client.getOutputStream()); while(true){ User user = (User) ois.readObject(); if(user.getUsername().equals("bjsxt") &&user.getPassword().equals("bjsxt")){ System.out.println(user.getUsername() + "登录成功"); flag = true; }else{ System.out.println(user.getUsername()+"-------->"+user.getPassword()+"登录失败"); } //给客户端反馈 dos.writeBoolean(flag); if(flag){ break;//登录成功,则不需要再接收客户端数据了,结束循环 } } }catch(IOException e){ e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- 多线程TcpServer
- HttpHandler与HttpModule的用处与区别
- 全平台简易接入ROS机器人系统网络方法
- Volley请求网络简单学习
- Volley第三方请求网络数据
- 白话解释 对称加密算法 VS 非对称加密算法 OSI模型,TLS/SSL 及 HTTPS
- bzoj 1596 [Usaco2008 Jan]电话网络
- OSI七层协议模型和TCP/IP四层模型比较
- Python案例-网络编程-FTP&断点续传&进度条&上传下载
- [置顶] Ubuntu下配置MPTCP
- 关于setConnectTimeout和setReadTimeout的问题
- TCP/UDP/IP学习
- 判断网络是否连接成功
- android检查网络连接
- HTTP之referer
- Web基础之httpd服务搭建(一)
- 通过packetdrill构造的包序列理解TCP快速重传机制
- 一次web访问背后的整个过程
- 网络编程(发送get和post请求到服务器端,并获取响应)
- python多线程网络编程