多客户端登录:
1.创建服务器端线程类,run()
方法中实现对一个请求的响应处理
2.修改服务器端代码,实现循环监听状态
3.服务器端每监听到一个请求,创建一个处理线程
/*
*用户对象
*/
public class User implements Serializable {
private String name;
private String pwd;
public User() {}
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;
}
}
创建两个客户:
/**
*
*客户1
*两个客户代码一样,另一个省略
*
*
*/
public class Client01 {
public static void main(String[] args) {
VoUser login=new VoUser("admin","123456");
try {
//创建Socket指定访问地址和端口
Socket socket = new Socket("localhost",5000);
//获取输出流对象
OutputStream os = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
//输出的是对象的值
oos.writeObject(login);
oos.close();os.close();socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
将服务器收到内容代码写入run方法中
public class ServerThread extends Thread{
//定义一个客户端socket
private Socket socket;
public ServerThread(){}
public ServerThread(Socket socket){
this.socket=socket;
}
@Override
public void run() {
//获取客户端的输出流
try {
InputStream is=socket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
VoUser user=(VoUser)ois.readObject();
System.out.println("我是服务器,接收到客户端的信息是:"
+user.getName()+"------"+user.getPwd());
ois.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
*
*测试类Test
*/
public static void main(String[] args) {
ServerSocket server=null;
Socket socket=null;
VoUser user=new VoUser();
try {
//创建ServerSocket端口
server=new ServerSocket(5000);
//创建通信连接
while(true){
socket=server.accept();
//创建线程执行响应操作
ServerThread st=new ServerThread(socket);
st.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
测试方法:先开启Test测试类(服务器),在开启两个客户端。得到登录信息