Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #11745

Re: Interplatform (interprocess, interlanguage) communication

Date 2012-02-04 18:35 -0500
From Arne Vajhøj <arne@vajhoej.dk>
Newsgroups comp.lang.java.programmer
Subject Re: Interplatform (interprocess, interlanguage) communication
References <IPC-20120203200443@ram.dialup.fu-berlin.de> <9p32qmFcrnU1@mid.individual.net> <4f2c6626$0$287$14726298@news.sunsite.dk> <9p4odoFj5lU1@mid.individual.net>
Message-ID <4f2dc0c0$0$294$14726298@news.sunsite.dk> (permalink)
Organization SunSITE.dk - Supporting Open source

Show all headers | View raw


On 2/4/2012 7:59 AM, Robert Klemme wrote:
> On 03.02.2012 23:56, Arne Vajhøj wrote:
>> On 2/3/2012 4:44 PM, Robert Klemme wrote:
>>> On 02/03/2012 08:52 PM, Stefan Ram wrote:
>>>> »X« below is another language than Java, for example,
>>>> VBA, C#, or C.
>>>>
>>>> When an X process and a Java process have to exchange
>>>> information on the same computer, what possibilites are
>>>> there? The Java process should act as a client, sending
>>>> commands to the X process and also wants to read answers
>>>> from the X process. So, the X process is a kind of server.
>>>>
>>>> My criteria are: reliability and it should not be extremely
>>>> slow (say exchanging a string should not take more than
>>>> about 10 ms). The main criterion is reliability.
>>>>
>>>> »Reliability« means little risk of creating problems, little
>>>> risk of failure at run-time. (It might help when the client
>>>> [=Java process] can reset the communication to a known and
>>>> sane start state in case of problems detected at run-time.)
>>>>
>>>> The host OS is Windows, but a portable solution won't hurt.
>>>>
>>>> A list of possibilities I am aware of now:
>>>>
>>>> Pipes
>>>>
>>>> I have no experience with this. I heard one can establish
>>>> a new process »proc« with »exec« and then use
>>>>
>>>> BufferedWriter out = new BufferedWriter(new
>>>> OutputStreamWriter(proc.getOutputStream()));
>>>> BufferedReader in = new BufferedReader(new
>>>> InputStreamReader(proc.getInputStream()));
>>>
>>> A pipes is just 1:1 communication and only in 1 direction.
>>
>> That type of pipe is bidirectional.
>
> Well, that are actually two pipes aren't they? Or it's a socketpair,
> depending on platform.

The Java Process supports in and out.

Whether the OS does it via single bidirectional or two unidirectional
does not change the Java code.

Thinking of it then two sounds more likely as Java also need to
separate err and out - that would be a lot easier with two.

>                             Also, this approach only works if the Java
> process always starts the other process.

Yep.

>>>> One process writes to the end of a file, the other reads
>>>> from the end of the file? - I never tried this, don't know
>>>> if it is guaranteed to work that one process can detect and
>>>> read, whether the other has just appended something to a file.
>>>
>>> You can, but what do you do with the ever increasing file? This is not
>>> reliable since the filesystem will fill up at some point.
>>
>> It would be possible to switchover to a new file and
>> delete the old file if he really wanted to go this route.
>
> Well, yes, but that soon gets nasty because of file locking etc.

Some coding required.

Arne

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

Re: Interplatform (interprocess, interlanguage) communication Robert Klemme <shortcutter@googlemail.com> - 2012-02-03 22:44 +0100
  Re: Interplatform (interprocess, interlanguage) communication Arne Vajhøj <arne@vajhoej.dk> - 2012-02-03 17:56 -0500
    Re: Interplatform (interprocess, interlanguage) communication Robert Klemme <shortcutter@googlemail.com> - 2012-02-04 13:59 +0100
      Re: Interplatform (interprocess, interlanguage) communication Arne Vajhøj <arne@vajhoej.dk> - 2012-02-04 18:35 -0500

csiph-web