users-prolog
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: GNU Prolog - Java sockets communication


From: Dennis Decker Jensen
Subject: Re: GNU Prolog - Java sockets communication
Date: Wed, 27 Oct 2004 10:24:51 +0200

On Mon, 2004-10-25 at 16:43 +0100, Tiago Loureiro wrote:
> Greetz
> 
> I'm writting this because I'm really desperate trying
> to communicate from my JAVA client to a GNU PROLOG
> server.
> 
> I've used, for tests only, the code provided by Daniel
> Diaz on the thread "UDP sockets", for the PROLOG
> server:

Good example! Thanks for pointing to this.

> 
> server :-
>         socket('AF_INET', Sock),
>         socket_bind(Sock, 'AF_INET'(localhost, 7000)),
>         socket_listen(Sock, 4),
>         socket_accept(Sock, C, SI, SO),
>         close(SO),
>         format('accepting a connection from client :
> ~a~n', [C]),
>         repeat,
>         read(SI, T),
>         (   T \== end_of_file ->
>             write(T), nl,
>             fail
>         ;   !),   
>         close(SI),
>         socket_close(Sock).
> 
> 
> client_init :-
>         socket('AF_INET',Socket),
>        
> socket_connect(Socket,'AF_INET'(localhost,7000), SI,
> SO),
>         close(SI),
>         add_stream_alias(SO, out),
>         set_stream_buffering(out, line).
> 
> client_send(T):-
>         format(out, '~q.~n',[T]),
>         write(out).
> 

Notice the period (dot) in the format-term, right after ~q.

> client_term :-
>         close(out).
> 
> And my JAVA code is something like:
> 
> import java.net.*;
> import java.io.*;
> 
>     public class X{
> 
>         public static final String
> SERV_HOST="127.0.0.1";
>         public static final int SERV_PORT=7000;
> 
>         public static void main(String [] args){
>                
>             try{
>                 String s = "";
> 
>                 while (true){
>         
>                 Socket socket = new
> Socket(SERV_HOST,SERV_PORT);
>                 ObjectOutputStream oStream = new 
>                        
> ObjectOutputStream(socket.getOutputStream());  
>                 
>                 
>             BufferedReader in 
>                                 = new BufferedReader(
>                                         new
> InputStreamReader(System.in));
> 
>                         s = in.readLine();
>                                        
> oStream.writeObject(s);

You need a period (dot) after this too.
I cannot remember the Java API, but something like

o.print(".");

should do it.

>         
>                 socket.close();
>                 }
>             }
>         
>             catch (java.io.IOException ex){
>                 ex.printStackTrace();
> 
> (sorry for the code formatting from the mail client)
> 
> I understand that the problem is that the PROLOG
> server needs to get the socket stream input with a
> certain formating other than the one my JAVA client is
> providing.
> 
> My questions:
> 
> What is the best way for me to send data through the
> client?
> What sort of formating does it need to be accepted by
> the PROLOG server?

The server is trying to read prolog terms which need
to end with a period (dot), just like statements in
Smalltalk or Pascal need to end with a period (dot).
You can think of it as how you usually end your sentences
(in english anyway): With a period.

I don't know if it is the best way. I've been reading
the manual to find out if I can make gprolog read
and process other things than ordinary terms, that is something more
like ordinary strings and numbers that are not formatted like
terms, e.g. something like this:

# name amount comment
Dennis 100000 newbie from Denmark
Daniel 1000000 developer from France
Tiago 150000 newbie from England

which does not end with period but are more
akin to AWK-like line-records. I know it can,
just not how excactly -- still experimenting.

> Thank you for reading this newbie's request for help :)

(-: Thank you. I'm a newbie myself.

--
Dennis Decker Jensen

Behold, the fool saith, "Put not all thine eggs in the one
basket"--which is but a manner of saying, "Scatter your money and your
attention;" but the wise man saith, "Put all your eggs in the one basket
and--WATCH THAT BASKET."
                -- Mark Twain, "Pudd'nhead Wilson's Calendar"






reply via email to

[Prev in Thread] Current Thread [Next in Thread]