程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> java-Java 網絡通信 類還未編寫如何進行調用(或者解決思路)

java-Java 網絡通信 類還未編寫如何進行調用(或者解決思路)

編輯:編程解疑
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
             * 該使用什麼方法來處理?反射?工廠模式?感覺都不大能解決
             */

        }
    }

最佳回答:


你這個問題實際上就是要定義一個遠程調用協議
1.在客戶段給發送信息前面加一個頭,例如:
@header@type:methodinvoke@服務端的類@服務端的方法@參數列表@end@header@
2.在服務端接受客戶段信息時,判斷一下頭部是否有如上頭,如果有,按照協議解析,
然後根據解析內容通過反射調用客戶段請求的邏輯執行

此外,服務端最好使用線程池處理客戶段請求
在類中定義線程池常量
private static ExecutorService executoService;

在調用具體邏輯時
executoService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 10);
executoService.execute(new SocketThread(socket));

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved