Comunicación entre el cliente python y el servidor java.

Mi objective es enviar un mensaje desde el socket python al socket java. Me fijé en el recurso mencionado anteriormente. Sin embargo, estoy luchando para que el cliente de Python hable con el servidor Java. Principalmente porque (Fin de línea) en python es diferente de eso en java.

diga que escribo desde el cliente de Python: mensaje 1: abcd mensaje 2: efgh mensaje 3: q (para salir)

En el servidor java: recibo el mensaje 1: abcdefghq seguido de una excepción porque el cliente de Python había cerrado el socket desde su extremo.

¿Podría alguien sugerir una solución para una conversación coherente entre Java y Python?

Referencia que utilicé: http://www.prasannatech.net/2008/07/socket-programming-tutorial.html

Actualización : Olvidé agregar, estoy trabajando en TCP.

Mi código JAVA es así: (socket del servidor)

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 ); } } } 

Mi código PYTHON: (Socket del cliente)

 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; 

SALIDA::

EN LA CONSOLA PYTHON (Cliente):

ENVIAR (TIPO q o Q para salir): abcd (presionando ENTER)

ENVIAR (TIPO q o Q para salir): efgh (presionando ENTER)

ENVIAR (TIPO q o Q para salir): q (presionando ENTER)

EN LA CONSOLA DE JAVA (Servidor):

TCPServer Esperando cliente en el puerto 5000

EL CLIENTE /127.0.0.1:1335 ESTÁ CONECTADO

RECIBIDO: abcdefghq

Debe adjuntar \n al final de los datos …

es decir:

 client_socket.send(data + '\n') 

ya..tienes que agregar ‘\ n’ al final de la cadena en el cliente de Python ….. aquí hay un ejemplo … 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" 

`

Ahora aquí está el código de Java: 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); } } 

`Referencia: Python TCP Client y Java TCP Server

Aquí hay un código de trabajo para el mismo: 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 

Sé que es tarde, pero específicamente para su caso, recomendaría las llamadas RPC de RabbitMQ. Tienen muchos ejemplos en su web en Python, Java y otros lenguajes:

introduzca la descripción de la imagen aquí

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