神之羽翎 2016-01-26 08:35 采纳率: 100%
浏览 1279
已采纳

Java 网络通信 类还未编写如何进行调用(或者解决思路)

  程序想实现的效果:客户端现在有一个对象“狗”,加入了一个LinkedList集合,随后将该集合发送到服务器端。服务器端接收到这个集合,会调用一个方法Judge来判断LinkedList里面有什么,如果是狗则调用XXX方法,如果是猫则调用XXX方法。
        问题描述:现在客户端与服务器端单独抽出成为一个jar工具包。也就是说服务器端和客户端会预先写好。换而言之,在该包里没有Judge方法,Judge方法是在程序实际编写时再写成的。那么此时服务器端代码应该怎么写?
        实际应用举例:当实际使用时,应用程序(客户端)调用Send(),此时该jar包中已编好的程序会将对象发送到服务器端;在服务器端只需写一个Judge(),该方法会被jar包中的程序自动调用。

        大体实现的代码:

客户端:

 //向服务器发送数据
    public void send(TransferLinkedList linkedList) throws IOException{
        /**
         * 本方法用于客户端向服务器发送数据。首先从套接字中获取基本输出流,接下来将该输出流转换为对象输出流以输出对象
         */
        //从该套接字中获取输出流
        OutputStream clientOut = client.getOutputStream();
        //将该输出流处理为对象输出流
        ObjectOutputStream clientOutObject = new ObjectOutputStream(clientOut);
        //传输信息
        clientOutObject.writeObject(linkedList);

        //刷新缓存区
        clientOutObject.flush();

        //接收服务器信息以确认是否成功发送信息

    }

服务器端:

 //开始运行
    public void run() throws IOException{
        //服务器一直等待客户端的连接,当与客户端建立连接时,服务器分出一个线程建立新的Socket进行处理,原有Socket继续等待
        //此处为了简便省略线程
        while(true){
            Socket socket = server.accept();

            //处理新的Socket

            /**
             * 调用Judge方法,Judge方法应在实际使用该jar包时编写
             * 此时不知道Judge包含哪些方法,是怎么样的路径,甚至名字是否是Judge
             * 该使用什么方法来处理?反射?工厂模式?感觉都不大能解决
             */

        }
    }
  • 写回答

2条回答 默认 最新

  • wanghan1977 2016-01-28 01:48
    关注

    你这个问题实际上就是要定义一个远程调用协议
    1.在客户段给发送信息前面加一个头,例如:
    @header@type:methodinvoke@服务端的类@服务端的方法@参数列表@end@header@
    2.在服务端接受客户段信息时,判断一下头部是否有如上头,如果有,按照协议解析,
    然后根据解析内容通过反射调用客户段请求的逻辑执行

    此外,服务端最好使用线程池处理客户段请求
    在类中定义线程池常量
    private static ExecutorService executoService;

    在调用具体逻辑时
    executoService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 10);
    executoService.execute(new SocketThread(socket));

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 python读取速度问题
  • ¥15 stm32f407使用DMA问题
  • ¥15 您好 这个API接口该怎么弄 网站搭建好了 API也有 现在就不知道该怎么填写API 不知道怎么用
  • ¥88 用uniapp写一个多端的程序,用到高德地图,用高德的JSAPI吗?
  • ¥20 关于#c++#的问题:水果店管理系统
  • ¥30 dbLinq最新版linq sqlite
  • ¥20 对D盘进行分盘之前没有将visual studio2022卸载掉,现在该如何下载回来
  • ¥15 完成虚拟机环境配置,还有安装kettle
  • ¥15 2024年全国大学生数据分析大赛A题:直播带货与电商产品的大数据分析 问题5. 请设计一份优惠券的投放策略,需要考虑优惠券的数量、优惠券的金额、投放时间段和投放商品种类等因素。求具体的python代码
  • ¥15 有人会搭建生鲜配送自营+平台的管理系统吗