SocketClient  不知道是否正确    SocketServer 不会写了   程序写了好几天 剩最后一步了 网路编程 帮忙啊后面有相关的类都给出封装SocketServer,完成并发接收客户端发送的请求,启动新的线程来调用AdminManagementBIZ中的方法处理请求,并将处理后的结果通过Socket返回给客户端,在服务器端的所有Socket代码都封装在此类中。public class SocketClient {
private Socket S;//保存与服务器端交互的Socket的引用 private ObjectOutputStream Oos;//保存Socket中用于发送Command对象的对象输出流
private ObjectInputStream Ois;//保存Socket中用于接收Command对象的对象输入流
public SocketClient(String serverIp, int port)throws Exception{
//在该方法中初始化成员变量s , oos 和ois。
 S = new Socket(serverIp,port);
Oos = new ObjectOutputStream(S.getOutputStream());
Ois = new ObjectInputStream(S.getInputStream());

}
public void close(){
//该方法用于关闭s,oos和ois。
try {
S.close();
Oos.close();
Ois.close();
} catch (IOException e) {
e.printStackTrace();
}

}
public void exit()throws Exception{
//该方法用于构造一个ExitCommand对象,并将这个对象发送到服务器端。
ExitCommand command = new ExitCommand();
Oos.writeObject(command);
Ois.readObject();

}
public Collection getAllAdmin()throws Exception{
/*
 * 该方法用于将获取所有管理员的请求封装到GetAllAdminCommand对象中,
 * 并把这个对象发送到服务器端,然后接收服务器端返回的结果对象。
 */
List<Admin> list = new ArrayList<Admin>();
GetAllAdminCommand.setAdmins(list);
Oos.writeObject(list);
return (Collection) Ois.readObject();
/*
 * 从服务器端获取的结果对象中取出isSuccessful的值,如果为真,
 * 说明服务器 端执行成功,获取结果对象(GetAllAdminCommand类型的对象)
 * 中的admins的值作为此方法的返回值;否则,说明服务器端执行时出现异常,
 * 在此方法中使用结果对象的reason的值来构造Exception对象,并抛出构造好
 * 的Exception。
 */

}
public void addAdmin(int id, String name, String loginName,
String loginPassword, String phone, String email, Date enrollDate)throws Exception{
/*
 * 该方法用于将添加管理员的请求封装到AddAdminCommand对象中,
 * 并把这个对象发送到服务器端,然后接收服务器端返回的结果对象。
 */
Admin a = new Admin(id,name,loginName,loginPassword,phone,email,enrollDate);
AddAdminCommand.setAdmin(a);
Oos.writeObject(a);
Ois.readObject();
/*
 * 从服务器端获取的结果对象中取出isSuccessful的值,如果不为真,
 * 说明服务器端执行时出现异常,在此方法中使用结果对象的reason的
 * 值来构造Exception对象,并抛出构造好的Exception
 */
}
public Admin getAdminById(Long adminId)throws Exception{
/*
 * 该方法用于将根据唯一标识查询管理员的请求封装到GetAdminByIdCommand对象中,
 * 并把这个对象发送到服务器端,然后接收服务器端返回的结果对象。
 */
try {
Admin a = new Admin();
if(a.getId()==adminId){
GetAdminByIdCommand.setAdmin(a);
Oos.writeObject(a);
Ois.readObject();
return a;
}
} catch (Exception e) {
System.out.println("id不存在!");
}
return null;

/*
 * 从服务器端获取的结果对象中取出isSuccessful的值,如果为真,
 * 说明服务器 端执行成功,获取结果对象(GetAdminByIdCommand类型的对象)
 * 中的admin的值作为此方法的返回值;否则,说明服务器端执行时出现异常,
 * 在此方法中使用结果对象的reason的值来构造Exception对象,并抛出构造好
 * 的Exception
 */

}
public void modifyAdmin(Admin admin)throws Exception{
/*
 * 该方法用于将修改管理员的请求封装到ModifyAdminCommand对象中,
 * 并把这个对象发送到服务器端,然后接收服务器端返回的结果对象。
 */

ModifyAdminCommand.setAdmin(admin);
Oos.writeObject(admin);
Ois.readObject();


/*
 * 从服务器端获取的结果对象中取出isSuccessful的值,如果不为真,
 * 说明服务器端执行时出现异常,在此方法中使用结果对象的reason的
 * 值来构造Exception对象,并抛出构造好的Exception。
 */
}
public void removeAdmin(Long adminId)throws Exception{
/*
 * 该方法用于将删除管理员的请求封装到RemoveAdminCommand对象中,
 * 并把这个对象发送到服务器端,然后接收服务器端返回的结果对象。
 */
Admin a = new Admin();
if(a.getId()==adminId){
RemoveAdminCommand.setAdminId(adminId);
Oos.writeObject(a);
Ois.readObject();
}
}
}
===============================================================
//AddAdminCommand(添加admin) 、  ExitCommand(退出客户端) 、GetAdminByIdCommand(根据id返回一个admin) 、GetAllAdminCommand(返回admin集合) 、ModifyAdminCommand (修改admin)、RemoveAdminCommand(删除admin) 都是Command的子类 
======================================================
public abstract class Command implements Serializable{
private boolean isSuccessful;//服务器端处理是否成功
private String Reason;//服务器端处理失败的原因
public boolean isSuccessful() {
return isSuccessful;
}
public void setSuccessful(boolean isSuccessful) {
this.isSuccessful = isSuccessful;
}
public String getReason() {
return Reason;
}
public void setReason(String reason) {
Reason = reason;
}
public abstract void execute(AdminManagementBIZ adminBIZ);
/*
 * 这个方法是一个抽象方法,会由Command的子类去实现,
 * 这个方法由服务器端调用业务类中的方法来完成业务逻辑。
 */
}===============================================================
public interface AdminManagementBIZ {
Collection getAllAdmin()throws InfrastructureException; void addAdmin(long id, String name, String loginName, String loginPassword,
String phone, String email, Date enrollDate)throws RepeatIdException,RepeatLoginNameException,InfrastructureException; Admin getAdminById(Long adminId) throws ObjectNotFoundException,InfrastructureException; void modifyAdmin(Admin admin); void removeAdmin(Long adminId)throws RemoveSuperAdminException,InfrastructureException;
}
===============================================================