您的位置:首页 > 房产 > 家装 > 梵克雅宝官网旗舰店_网站微信开发_哈尔滨seo优化公司_电脑编程培训学校

梵克雅宝官网旗舰店_网站微信开发_哈尔滨seo优化公司_电脑编程培训学校

2025/4/27 7:03:01 来源:https://blog.csdn.net/m0_62696265/article/details/147495873  浏览:    关键词:梵克雅宝官网旗舰店_网站微信开发_哈尔滨seo优化公司_电脑编程培训学校
梵克雅宝官网旗舰店_网站微信开发_哈尔滨seo优化公司_电脑编程培训学校

需求描述

  • 服务器端
    • 搭建一个 TCP 服务器,监听本地的 7777 端口,支持多客户端连接。
    • 维护一个电影收藏列表,每个电影条目涵盖电影名称、导演、上映年份、评分等信息。
    • 能够响应客户端的这些请求:
      • 添加电影到收藏列表:接收客户端发送的 Movie 对象,利用 ObjectInputStream 读取后,添加到电影收藏列表。
      • 删除电影:接收客户端发送的电影名称,通过 ObjectInputStream 读取,从收藏列表中删除该电影。
      • 获取收藏列表:把当前的电影收藏列表封装成 MovieCollection 对象,借助 ObjectOutputStream 发送给客户端。
      • 按评分筛选电影:接收客户端发送的评分阈值,使用 ObjectInputStream 读取,筛选出评分大于等于该阈值的电影,封装成 MovieCollection 对象并使用 ObjectOutputStream 发送给客户端。
  • 客户端
    • 创建一个 TCP 客户端,连接到本地的 7777 端口。
    • 可以向服务器发送添加电影请求,创建 Movie 对象并使用 ObjectOutputStream 发送。
    • 可以向服务器发送删除电影请求,将电影名称用 ObjectOutputStream 发送。
    • 可以向服务器发送获取收藏列表请求,接收服务器返回的 MovieCollection 对象,使用 ObjectInputStream 读取并显示。
    • 可以向服务器发送按评分筛选电影请求,将评分阈值使用 ObjectOutputStream 发送,接收服务器返回的筛选结果并显示。
数据描述
  • Movie 类
    • String movieName:电影名称。
    • String director:导演。
    • int releaseYear:上映年份。
    • double rating:评分。
  • MovieCollection 类
    • ArrayList<Movie> movieList:电影收藏列表。

 Server和Client的Data,Movie和MovieCollection类 

        Movie类

import java.io.Serializable;public class Movie implements Serializable {private String movieName;private String director;private int releaseYear;private double rating;public Movie() {}public Movie(String movieName, String director, int releaseYear, double rating) {this.movieName=movieName;this.director=director;this.releaseYear=releaseYear;this.rating=rating;}public String getMovieName() {return movieName;}public void setMovieName(String movieName) {this.movieName=movieName;}public String getDirector() {return director;}public void setDirector(String director) {this.director=director;}public int getReleaseYear() {return releaseYear;}public void setReleaseYear(int releaseYear) {this.releaseYear=releaseYear;}public double getRating() {return rating;}public void setRating(double rating) {this.rating=rating;}@Overridepublic String toString() {return "电影名称: " + getMovieName() + ", 导演: " + getDirector() + ", 上映年份: " + getReleaseYear() + ",评分:" + getRating() ;}
}

        MovieCollection类

import java.io.Serializable;
import java.util.ArrayList;public class MovieCollection implements Serializable {private ArrayList<Movie> movieList;public MovieCollection() {this.movieList= new ArrayList<>();}public ArrayList<Movie> getMovieList() {return movieList;}public void addMovie(Movie movie) {movieList.add(movie);}public void removeMovie(String movieName) {movieList.removeIf(movie -> movie.getMovieName().equals(movieName));}public Movie chooseMovieByRating(int rating){for (Movie movie : movieList) {if (movie.getRating()>=rating){return movie;}}return null;}
}

        Data类(Data类启到一个把用户操作封装的作用,便于数据的打包和传输,方便程序编写的使用

import java.io.Serializable;public class Data implements Serializable {private String op;private String movieName;private int movieRating;private Movie movie;public Data() {}public Data(String op) {this.op=op;}public String getOp() {return op;}public void setOp(String op) {this.op=op;}public Movie getMovie() {return movie;}public void setMovie(Movie movie) {this.movie=movie;}public void setMovieName(String movieName) {this.movieName = movieName;}public String getMovieName() {return movieName;}public void setMovieRating(int movieRating) {this.movieRating = movieRating;}public int getMovieRating() {return movieRating;}
}

客户端ClientMovie:

import com.zbMovie.entity.Data;
import com.zbMovie.entity.Movie;
import com.zbMovie.entity.MovieCollection;import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.ArrayList;public class ClientMovie {public static void main(String[] args) throws IOException, ClassNotFoundException {Socket socket = new Socket("localhost", 7777);ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());String opWhat;String movieDelete;int movieRating;String msg;Data op = new Data();// 添加电影===============================================Movie movie = new Movie("大话西游", "周星驰", 2004,9);
//        Movie movie = new Movie("碟中谍", "汤姆克鲁斯", 1994,6);opWhat = "添加";//包装Dataop.setOp(opWhat);op.setMovie(movie);//发送Dataoos.writeObject(op);//接收系统发回的信息msg = (String) ois.readObject();System.out.println(msg);//删除电影===============================================opWhat = "删除";movieDelete = "碟中谍";//包装Dataop.setOp(opWhat);op.setMovieName(movieDelete);//发送Dataoos.writeObject(op);//接收系统发回的信息msg = (String) ois.readObject();System.out.println(msg);//评分查询===============================================opWhat = "评分查询";movieRating = 8;//包装Dataop.setOp(opWhat);op.setMovieRating(movieRating);//发送Dataoos.writeObject(op);//接收系统发回的信息msg = (String) ois.readObject();System.out.println(msg);// 查看电影列表===============================================opWhat = "查看电影列表";//包装Dataop.setOp(opWhat);//发送Dataoos.writeObject(op);//接收系统发回的歌单对象MovieCollection movieCollection = (MovieCollection) ois.readObject();//将歌单对象转换为集合并打印ArrayList<Movie>  movieList = movieCollection.getMovieList();for (Movie m : movieList) {System.out.println(m);}}
}

服务端Server:

        ServerThread类:

import com.zbMovie.entity.Data;
import com.zbMovie.entity.MovieCollection;import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;public class ServerThread extends Thread {private Socket socket;private MovieCollection movieList;public ServerThread(Socket socket, MovieCollection movieList) {this.socket = socket;this.movieList = movieList;}@Overridepublic void run() {ObjectInputStream ois =null;ObjectOutputStream oos =null;try {ois=new ObjectInputStream(socket.getInputStream());oos=new ObjectOutputStream(socket.getOutputStream());Data op = new Data();op =(Data) ois.readObject();switch (op.getOp()) {case "添加":movieList.addMovie(op.getMovie());System.out.println("添加电影: " + op.getMovie());oos.writeObject("添加成功!");break;case "删除":movieList.removeMovie(op.getMovieName());System.out.println("删除电影: " + op.getMovieName());oos.writeObject("删除成功!");break;case "评分查询":String msg = "评分高于"+op.getMovieRating()+"的电影有:";oos.writeObject(msg+movieList.chooseMovieByRating(op.getMovieRating()).toString());break;case "查看电影列表":oos.writeObject(movieList);System.out.println("返回给客户端电影列表");break;}} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}finally {try {oos.close();ois.close();socket.close();} catch (IOException e) {e.printStackTrace();}}}
}

        Server类

import com.zbMovie.entity.MovieCollection;import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(7777);System.out.println("服务器启动 端口:" + 7777);MovieCollection movieList = new MovieCollection();while (true) {Socket socket=serverSocket.accept();ServerThread serverThread = new ServerThread(socket, movieList);serverThread.start();}}
}

运行结果:

添加电影(分别添加):

查看电影列表:

评分查询(大于等于8):

删除电影(碟中谍):

查看电影列表:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com