客户端代码
package com.lsc.test01;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Scanner;
/**
* @author lishengchen
* @version 1.0
* @Date 2020/11/24
*/
public class TestClient {
public static void main(String[] args) throws IOException {
int count = 0;
Scanner sc = new Scanner(System.in);
login(sc, count);
}
private static void login(Scanner sc, int count) throws IOException {
Socket s = null;
ObjectOutputStream oos = null;
try {
System.out.println("请输入用户名!");
String name = sc.next();
System.out.println("请输入用户名!");
String pwd = sc.next();
User user = new User(name, pwd);
s = new Socket("localhost",8888);
//DataOutputStream dos = new DataOutputStream(s.getOutputStream());
//将键盘录入的信息通过ObjectOutputStream发送到socket服务端
oos = new ObjectOutputStream(s.getOutputStream());
oos.writeObject(user);
//从服务端接受到返回的信息
DataInputStream dis = new DataInputStream(s.getInputStream());
String response = dis.readUTF();
System.out.println(response);
count++;
if(count < 3){
if(response != null && response.startsWith("对不起")){
login(sc, count);
}
}else{
System.out.println("对不起,登录次数超过3次!");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
oos.close();
s.close();
}
}
}
服务端代码
package com.lsc.test01;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author lishengchen
* @version 1.0
* @Date 2020/11/24
*/
public class TestServer {
public static void main(String[] args) throws IOException, ClassNotFoundException {
int count = 0;
try {
//socket服务端
ServerSocket ss = new ServerSocket(8888);
Socket socket = null;
while (true) {
socket = ss.accept();
//通过构造方法将socket信息传入一个新的线程中执行
new SocketThread(socket).start();
count++;
System.out.println("当前尝试登录的第"+count+"个用户,该用户的IP为:" + socket.getInetAddress());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
线程类代码
package com.lsc.test01;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;
/**
* @author lishengchen
* @version 1.0
* @Date 2020/11/24
*/
public class SocketThread extends Thread {
ObjectInputStream ois = null;
DataOutputStream dos = null;
Socket socket = null;
SocketThread st = null;
//构造方法
public SocketThread(Socket socket){
this.socket = socket;
}
@Override
public void run() {
try {
//通过输入将客户端发过的对象信息解析出来
ois = new ObjectInputStream(socket.getInputStream());
User user = (User)ois.readObject();
String name = user.getName();
String pwd = user.getPwd();
//判断账号密码,将登录结果反馈给客户端
dos = new DataOutputStream(socket.getOutputStream());
if("lsc".equals(name) && "123456".equals(pwd)){
dos.writeUTF("恭喜,登录成功!");
}else{
dos.writeUTF("对不起,账号或者密码不正确!");
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
User对象
package com.lsc.test01;
import java.io.Serializable;
/**
* @author lishengchen
* @version 1.0
* @Date 2020/11/24
*/
public class User implements Serializable {
private static final long serialVersionUID = 5325554995318095216L;
private String name;
private String pwd;
public User(String name, String pwd) {
this.name = name;
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}