package com.example.test3;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class TestClient {//客户端
public static void main(String[] args) throws IOException {
System.out.println("客户端启动");
//1.创建Socket,用来发送请求的,指定服务器端的IP和端口号
Socket s = new Socket("localhost",8888);
//录入账号密码
Scanner sc = new Scanner(System.in);
System.out.print("请录入账号:");
String username = sc.next();
System.out.print("请输入密码:");
String password = sc.next();
//将账号密码封装成为User对象
User user = new User(username, password);
//2.对于客户端来说,我们直观的感受是用流来发送数据
OutputStream os = s.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(user);
//接收服务器端数据
s.shutdownOutput();
InputStream is = s.getInputStream();
DataInputStream dis = new DataInputStream(is);
System.out.println("登录结果:"+dis.readUTF());
System.out.println("222");
//关闭流,关闭套接字资源
dis.close();
is.close();
oos.close();
os.close();
s.close();
}
}
把上面那个dis.readUTF()删掉后可以运行,调用其他方法也可以输出222,read方法就报错
package com.example.test3;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TestServer {//服务器端
public static void main(String[] args) throws IOException, ClassNotFoundException {
System.out.println("服务器端启动");
//1.创建一个套接字,指定本侧的端口号
ServerSocket ss = new ServerSocket(8888);
//2.通过ServerSocket的accept方法获取服务器端的套接字
Socket s = ss.accept();
//3.对于服务器端来说,我们用流接收数据
InputStream is = s.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
User user = (User)(ois.readObject());
//进行校验
String str = null;
if (user.getUsername().equals("root")&&user.getPassword().equals("123123")){
str = "登录成功";
}else {
str = "登录失败";
}
//服务器对客户端的响应
s.shutdownInput();
OutputStream os = s.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF(str);
//4.关闭流,关闭网络资源
dos.close();
os.close();
ois.close();
is.close();
s.close();
ss.close();
}
}