先运行服务器端,服务器启动没报错,再启动客户端,也没报错,输入账号密码之后客户端报错如下截图,然后发现服务器端也报错,不知道是什么原因。
项目目录结构截图

错误截图:
客户端

服务器端

附上代码:
客户端
package com.cn.entity;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Scanner;
/**
* 基于TCP协议的Socket编程_双向通信_实现模拟用户登录
*/
public class Client {
public static void main(String[] args) throws IOException {
//(1)创建Socket对象,用于连接服务器
Socket client=new Socket("localhost", 8888);
//(2)获取输出流 (对象流)
ObjectOutputStream oos=new ObjectOutputStream(client.getOutputStream());
//(3)创建User对象
//调用获取用户对象的方法
User u=getUser();//new User("bjsxt", "bjsxt");
//(4)User对象发送到服务器
oos.writeObject(u);
//(5)获取输入流(数据流)
DataInputStream dis=new DataInputStream(client.getInputStream());
System.out.println(dis.readUTF());
//(6)关闭流
if(dis!=null){
dis.close();
}
if(oos!=null){
oos.close();
}
if(client!=null){
client.close();
}
}
//获取用户对象的方法
public static User getUser(){
Scanner input=new Scanner(System.in);
System.out.println("请输入用户名:");
String userName=input.next();
System.out.println("请输入密码:");
String password=input.next();
//封装成User对象
return new User(userName,password);
}
}
User类
package com.cn.entity;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = -5699785428357564782L;
private String userName;
private String passWord;
public User(String userName, String passWord) {
this.userName = userName;
this.passWord = passWord;
}
public User() {
}
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.cn.entity;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 基于TCP协议的Socket编程_双向通信_实现模拟用户登录
*/
public class Server {
public static void main(String[] args) throws IOException, ClassNotFoundException {
System.out.println("--------------服务器端已启动---------------");
//(1)创建SocketServer对象
ServerSocket server = new ServerSocket(8888); //10000是端口号
Socket socket = server.accept();
//(2)获取输入流(对象流) ,把字节流包装成对象流
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
//读Object类型,向上类型转换
User2 user = (User2) ois.readObject();
System.out.println(socket.getInetAddress().getHostAddress()+"请求登录");
System.out.println("用户名:"+user.getUserName());
System.out.println("密码:"+user.getPassWord());
//(3)堆用户名和密码进行验证
String str = "";
if ("bjsxt".equals(user.getUserName())&&"bjsxt".equals(user.getPassWord())){
str="登录成功";
}else {
str="对不起,账号密码不正确!";
}
//(4)获取输出流(数据流),把字节流包装成数据流
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF(str);
//(5)关闭流,关闭SockerServer
if (dos!=null){
dos.close();
}
if (ois!=null){
ois.close();
}
if (socket!=null){
socket.close();
}
}
}
User2类
package com.cn.entity;
import java.io.Serializable;
public class User2 implements Serializable {
private static final long serialVersionUID = -5699785428357564782L;
private String userName;
private String passWord;
public User2(String userName, String passWord) {
this.userName = userName;
this.passWord = passWord;
}
public User2() {
}
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;
}
}