Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Communication between python client and java server

My aim is to send a message from python socket to java socket. I did look out on the resource mentioned above. However I am struggling to make the Python client talk to Java server. Mostly because (End of line) in python is different from that in java.

say i write from python client: message 1: abcd message 2: efgh message 3: q (to quit)

At java server: i receive message 1:abcdefghq followed by exception because the python client had closed the socket from its end.

Could anybody please suggest a solution for a consistent talk between java and python.

Reference I used: http://www.prasannatech.net/2008/07/socket-programming-tutorial.html

Update: I forgot to add, I am working on TCP.

My JAVA code goes like this:(server socket)

String fromclient;

ServerSocket Server = new ServerSocket (5000);

System.out.println ("TCPServer Waiting for client on port 5000");

while(true) 
{
    Socket connected = Server.accept();
    System.out.println( " THE CLIENT"+" "+ connected.getInetAddress() +":"+connected.getPort()+" IS CONNECTED ");

    BufferedReader inFromClient = new BufferedReader(new InputStreamReader (connected.getInputStream()));

    while ( true )
    {
        fromclient = inFromClient.readLine();

        if ( fromclient.equals("q") || fromclient.equals("Q") )
        {
            connected.close();
            break;
        }
        else
        {
            System.out.println( "RECIEVED:" + fromclient );
        } 
    }
}

My PYTHON code : (Client Socket)

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("localhost", 5000))

while 1:

    data = raw_input ( "SEND( TYPE q or Q to Quit):" )
    if (data <> 'Q' and data <> 'q'):
        client_socket.send(data)
    else:
        client_socket.send(data)
        client_socket.close()
        break;

OUTPUT::

ON PYTHON CONSOLE(Client):

SEND( TYPE q or Q to Quit):abcd ( pressing ENTER)

SEND( TYPE q or Q to Quit):efgh ( pressing ENTER)

SEND( TYPE q or Q to Quit):q ( pressing ENTER)

ON JAVA CONSOLE(Server):

TCPServer Waiting for client on port 5000

THE CLIENT /127.0.0.1:1335 IS CONNECTED

RECIEVED:abcdefghq

like image 426
Amandeep Chugh Avatar asked Nov 15 '10 14:11

Amandeep Chugh


1 Answers

Append \n to the end of data:

client_socket.send(data + '\n')
like image 130
Shital Avatar answered Sep 26 '22 13:09

Shital