您的位置:首页 > 理论基础 > 计算机网络

网络编程--实现用户登录验证功能

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();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: