Communication between python client and java server

My goal is to send a message from a python socket to a java socket. I looked at the resource mentioned above. However, I try my best to have the Python client talk to the Java server. Mostly because (end of line) in python is different from (at the end of line) in java.

let's say writing from python client: message 1: abcd message 2: efgh message 3: q (to quit)

On a java server: I get a 1: abcdefghq message followed by an exception because the python client closed the socket from its end.

Can someone suggest a solution for a consistent conversation between java and python.

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

Update : I forgot to add, I'm working on TCP.

My JAVA code is as follows: (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 (press ENTER)

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

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

ON JAVA CONSOLE (Server):

TCPServer Waiting for a client on port 5000

CUSTOMER / 127.0.0.1: 1335 CONNECTED

GOT: abcdefghq

+4
source share
4 answers

You need to add \n to the end of the data ...

i.e.

 client_socket.send(data + '\n') 
+6
source

ya..you need to add '\ n' at the end of the line in the python client ..... here is an example ... PythonTCPCLient.py

`

 #!/usr/bin/env python import socket HOST = "localhost" PORT = 8080 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((HOST, PORT)) sock.sendall("Hello\n") data = sock.recv(1024) print "1)", data if ( data == "olleH\n" ): sock.sendall("Bye\n") data = sock.recv(1024) print "2)", data if (data == "eyB}\n"): sock.close() print "Socket closed" 

`

Now here is the java code: JavaServer.java `

  import java.io.*; import java.net.*; class JavaServer { public static void main(String args[]) throws Exception { String fromClient; String toClient; ServerSocket server = new ServerSocket(8080); System.out.println("wait for connection on port 8080"); boolean run = true; while(run) { Socket client = server.accept(); System.out.println("got connection on port 8080"); BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); PrintWriter out = new PrintWriter(client.getOutputStream(),true); fromClient = in.readLine(); System.out.println("received: " + fromClient); if(fromClient.equals("Hello")) { toClient = "olleH"; System.out.println("send olleH"); out.println(toClient); fromClient = in.readLine(); System.out.println("received: " + fromClient); if(fromClient.equals("Bye")) { toClient = "eyB"; System.out.println("send eyB"); out.println(toClient); client.close(); run = false; System.out.println("socket closed"); } } } System.exit(0); } } 

`Link: Python TCP Client and Java TCP Server

+1
source

here is the working code for it: Jserver.java

 import java.io.*; import java.net.*; import java.util.*; public class Jserver{ public static void main(String args[]) throws IOException{ ServerSocket s=new ServerSocket(5000); try{ Socket ss=s.accept(); PrintWriter pw = new PrintWriter(ss.getOutputStream(),true); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedReader br1 = new BufferedReader(new InputStreamReader(ss.getInputStream())); //String str[20]; //String msg[20]; System.out.println("Client connected.."); while(true) { System.out.println("Enter command:"); pw.println(br.readLine()); //System.out.println(br1.readLine()); } } finally{} } } 

Client.py

 import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 5000 # Reserve a port for your service. s.connect((host, port)) while 1: print s.recv(5000) s.send("message processed.."+'\n') s.close 
+1
source

I know it's late, but especially for your case, I would recommend RabbitMQ RPC calls. They have many examples on the Internet in Python, Java, and other languages:

enter image description here

https://www.rabbitmq.com/tutorials/tutorial-six-java.html

0
source

All Articles