JAVA IPC на Windows - PullRequest
       42

JAVA IPC на Windows

2 голосов
/ 14 сентября 2010

Я хочу открыть именованный канал с помощью Java и извлечь содержимое этого архива (rar / zip / etc ..) в именованный канал, затем запустить Mplayer с указанием местоположения этого канала и воспроизвести фильм.

Я пытался открыть IPC в Java с помощью этого проекта CLIPC , но мой код зависает в fifo.openWriter ();line

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

Я пытался создать небольшой серверный сокет в Java, который ожидает подключения и отправляет содержимое видеофайла в виде необработанных данных, но я не знаю, как сказать 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();
}

Ответы [ 2 ]

4 голосов
/ 30 мая 2011

Именованные каналы Windows абсолютно не связаны с именованными каналами POSIX, несмотря на их имена.

Именованные каналы Windows реализованы в конфигурации клиент / сервер.Сервер «создает» канал и клиентские контакты, которые создали сервер.Если сервер "умирает", ... канал автоматически уничтожается, тогда как именованные каналы на основе файловой системы POSIX позволяют промежуточное хранение в файловой системе.

Именованные каналы Windows так эквивалентны использованию сокетовчто можно легко поддаться искушению использовать вместо этого сокеты.

1 голос
/ 14 сентября 2010

Я не уверен, насколько хорошо каналы поддерживаются CLIPC на платформе Win32 (или самой Win32, если на то пошло).Для экономии вашего времени используйте сокеты, они поддерживаются в Java / Win32.

...