需求说明:
1、可以新建用户对象登录
2、用户对象需要拥有用户名等属性
3、登陆后反馈欢迎登陆字样
实现思路:
1、 创建User构造类
1.1 声明name和pwd属性,并声明有参构造方法
2、 创建客户端类User2LoginClient
2.1 接收数据,反馈给服务端类
2.2 新建user用户对象
3、创建服务端类User2LoginServer
3.1 启动线程
4、 创建线程类UserLoginThread
4.1在线程run方法重写中完成服务端类的动态
解题代码:
User构造类:
package KB21.a1116;
import java.io.Serializable;
public class User implements Serializable {
private String name;
private String pwd;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
public User(String name, String pwd) {
this.name = name;
this.pwd = pwd;
}
public User() {
}
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;
}
}
客户端类User2LoginClient:
package KB21.a1116;
import java.io.*;
import java.net.Socket;
public class UserLoginClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("0.0.0.0", 5000);
OutputStream os = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
User user = new User("zhangsan","123456");
oos.writeObject(user);
InputStream is = socket.getInputStream();
BufferedReader fr = new BufferedReader(new InputStreamReader(is));
String serverReply = "";
while ((serverReply = fr.readLine())!=null){
System.out.println("server" + serverReply);
}
os.flush();
oos.flush();
fr.close();
is.close();
os.close();
oos.close();
socket.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
服务端类User2LoginServer:
package KB21.a1116;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class User2LoginServer {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(5000);
while (true){
Socket socket = serverSocket.accept();
UserLoginThread userLoginThread = new UserLoginThread(socket);
userLoginThread.start();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
线程类UserLoginThread:
package KB21.a1116;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.Socket;
public class UserLoginThread extends Thread{
Socket socket = null;
public UserLoginThread(Socket socket){
this.socket = socket;
}
@Override
public void run() {
InputStream is = null;
try {
is = socket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
User user = (User)ois.readObject();
System.out.println("Client:" + user.getName() + " " + user.getPwd());
OutputStream os = socket.getOutputStream();
String reply = "欢迎"+ user.getName() + "登录";
os.write(reply.getBytes());
os.close();
ois.close();
is.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}