簡體   English   中英

Windows上的JAVA IPC

[英]JAVA IPC on Windows

我想使用Java打開一個命名管道,並將該存檔的內容(rar / zip / etc ..)提取到一個命名管道,然后在該管道的位置運行Mplayer並播放電影。

我試圖使用該項目CLIPC在Java中打開IPC,但是我的代碼在fifo.openWriter()中凍結了;

 FIFO fifo = new FIFO("jtpc_fifo");
 fifo.create();
 fifo.openWriter();

我嘗試過用Java創建一個小型服務器Socket,以等待連接並將視頻文件內容作為原始數據發送,但是我不知道如何告訴mplayer通過網絡獲取原始數據。

我想使用管道,因為我認為它是最好的解決方案,無需處理任何物理和大文件,其易變且最靈活

這就是我現在正在嘗試使用套接字,但是java服務器套接字僅在mplayer超時失敗后才接受連接


mplayer http://localhost:5555/file.raw

 try{


  String file = "D:\\tmp\\lie.to.me.201.the.core.of.it-sitv.mkv";

  ServerSocket socket = new ServerSocket(5555);
  System.out.println("UnrarTest.main() START");
  Socket s = socket.accept();
  System.out.println("UnrarTest.main() ACCEPT");


  final InputStream sin = s.getInputStream();
  new Thread(){
    public void run(){
      try{
        while(true){
          if(sin.available() > 0){
            int read = sin.read();
            System.out.println((char)read);
          }
        }
      }catch(Exception ee){
        ee.printStackTrace();
      }
    }
  }.start();


  final OutputStream sout = s.getOutputStream();
  final FileInputStream fin = new FileInputStream(file);
  new Thread(){
    public void run(){
      try{
        while(fin.available() > 0){
          int in = fin.read();
          System.err.println(in);
          sout.write(in);
        }
      }catch(Exception ee){
        ee.printStackTrace();
      }

    }
  }.start();

}catch(Exception e){
  e.printStackTrace();
}

Windows“命名管道”絕對與POSIX命名管道無關,盡管它們具有名稱。

Windows命名管道以客戶端/服務器構造實現。 服務器“創建”管道,客戶端與創建服務器的聯系人聯系。 如果服務器“死亡”,...管道將自動銷毀,而基於文件系統的POSIX命名管道則允許在文件系統上進行中間存儲。

Windows命名管道與套接字使用等價,因此很容易誘使您使用套接字。

我不確定Win32平台上的CLIPC(或Win32本身)對管道的支持程度。 為了節省您的時間,請使用套接字,Java / Win32上支持它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM