Ciao a tutti

Sto cercando di inviare un oggetto Java da me creato che implementa l'interfaccia Serializable ad un modulo Python.Il problema è che cercando di effettuare la scrittura il client Java ritorna il seguente errore:

java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutp utStream.java:109)
at java.net.SocketOutputStream.write(SocketOutputStre am.java:153)
at java.io.ObjectOutputStream$BlockDataOutputStream.d rain(ObjectOutputStream.java:1855)
at java.io.ObjectOutputStream$BlockDataOutputStream.s etBlockDataMode(ObjectOutputStream.java:1764)
at java.io.ObjectOutputStream.writeNonProxyDesc(Objec tOutputStream.java:1266)
at java.io.ObjectOutputStream.writeClassDesc(ObjectOu tputStream.java:1220)
at java.io.ObjectOutputStream.writeOrdinaryObject(Obj ectOutputStream.java:1404)
at java.io.ObjectOutputStream.writeObject0(ObjectOutp utStream.java:1167)
at java.io.ObjectOutputStream.writeFatalException(Obj ectOutputStream.java:1555)
at java.io.ObjectOutputStream.writeObject(ObjectOutpu tStream.java:346)
at cS.Client.main(Client.java:130)
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutp utStream.java:109)
at java.net.SocketOutputStream.write(SocketOutputStre am.java:153)
at java.io.ObjectOutputStream$BlockDataOutputStream.d rain(ObjectOutputStream.java:1855)
at java.io.ObjectOutputStream$BlockDataOutputStream.f lush(ObjectOutputStream.java:1800)
at java.io.ObjectOutputStream.flush(ObjectOutputStrea m.java:708)
at cS.Client.main(Client.java:139)


come se qualcosa chiudesse la comunicazione tra il modulo Java ed il modulo Python.

Se non ricordo male l'oggetto,implemetando l'oggetto l'interfaccia serializable,prima di essere spedito viene serializzato in un flusso di byte che poi viene deserializzato all'atto di arrivo del messaggio.In questo caso io penso che il modulo Python non debba deserializzare l'oggetto ma leggere i byte serializzati così come sono in modo poi da rinviarli successivamente al java.


Questo è il codice java:

codice:
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import cS.stringheTesi;



/**
 * @author aledani85
 *
 *Lui deve inviare un messaggio ad un server socket python in ascolto su una certa porta.
 *Il programma viene eseguito correttamente una volta creata la socket,fatta la bind su di essa
 *e connessa all'indirizzo del socket python lei una volta collegato il socket riesce ad 
 *inviare la stringa al server python al quale si deve connettere.Questa stringa poi diventerà
 *una query.
 *
 */
public class Client {




	/**
	 * Lui qui deve prendere una stringa ad inviarla al server python
	 *
	 */
	public static void main(String[] args) throws IOException {
		ObjectOutputStream  outToServerPython=null;
		ObjectInputStream inToServerPython=null;
		BufferedOutputStream bo=null;
		stringheTesi stringhe=null;
	    
		
		//BufferedReader in=null;
		/**
		 * Mi creo la socket che mi connetterà al server python.
		 */
		Socket sockClient=null;
		String str1="DANIELE ciao";
		String str2="pippo";
	

		/**
		 * 
		 * creo la client socket e la connetto all'indirizzo del server al quale mi voglio
		 * connettere che sarà il server Python.Prima di tutto creo l'indirizzo al quale mi dovrò connettere
		 * e poi quello sul quale verrà istanziato il mio socket client.Successivamente creo 
		 * la socket ne faccio la bind all'indirizzo nel quale si deve trovare la socket client
		 * e poi mi connetto all'indirizzo serverPython al quale si trova il server python.
		 * 
		 */




		try{
			InetSocketAddress clientPython=new InetSocketAddress("localhost",45000);
			InetSocketAddress clientJava=new InetSocketAddress(17000);
			sockClient=new Socket ();
			sockClient.bind(clientJava);
			sockClient.connect(clientPython);
			System.out.println("creata la socket");
		}

		/**
		 * Catturo l'eccezzioni che potrebbe lanciare il codice
		 * 
		 */

		catch (Exception e) {
			e.printStackTrace();
			System.out.println("Invio non riuscito");

		}

		/**
		 * 
		 * Invio la stringa,al server socket python al quale mi voglio collegare.
		 * l'invio scrivendo la Stringa che ho dichiarato prima.Però ciò che invierò in seguito
		 * sarà un oggetto perchè dovrò presumibilmente inviare una query.Mi creo un outputstream writer
		 * al quale attaccherò un filtro bufferedWriter in modo da bufferizzare ciò che invio al server prima di inviarlo.
		 * Dopo aver fatto ciò scrivo il messaggio tramite la write e poi vado a svuotare il bufferedwriter tramite il  comando
		 * flush in modo che non ci siano problemi per successivi invii dei dati.
		 */
		stringhe=new stringheTesi(str1, str2);
		
		try {
			outToServerPython=new ObjectOutputStream(sockClient.getOutputStream());	
		}
			
		/**
		 * Eccezione nel caso qualcosa nella scrittura dei dati dovesse andare male
		 * 
		 */
		catch (Exception e) {
			e.printStackTrace();
			System.out.println(e.getCause());
			System.out.println(e.getMessage());
		}
		
		
		try {
			
			outToServerPython.writeObject(stringhe);
			System.out.println("messaggio inviato.");
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		try {
			outToServerPython.flush();	
			System.out.println("Flush effettuata");
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		System.out.println("2");
		
	
		 * Qui vado a chiudere sia il buffer di scrittura ed anche la socket di connessione al 
		 * server python una volta scritti e poi letti i dati.
		 * 
		 */
		try {
			sockClient.close();
		} catch (Exception e) {
			e.printStackTrace();
		}	

}

}
codice:
Ed ecco il codice Python:
HOSTSERVERPYTHON='127.0.0.1'
PORTSERVERPYTHON=45000
HOSTCLIENTJAVA='127.0.0.1'
PORTCLIENTJAVA=17000
HOSTSERVERJAVA='127.0.0.1'
PORTSERVERJAVA=20000

socketRicezioneQuery=socket(AF_INET,SOCK_STREAM)
socketRicezioneQuery.bind((HOSTSERVERPYTHON,PORTSERVERPYTHON))
socketRicezioneQuery.listen(10)
 
letturaQuery,addr=socketRicezioneQuery.accept()
     

queryRicevutaDaClient=letturaQuery.recv(80)
print letturaQuery.__sizeof__()
    
print queryRicevutaDaClient  
    
    

    

if queryRicevutaDaClient:   
      messaggio="OK"
      print messaggio 
       
         
       
else:
     
      messaggio2="no"
      print messaggio2
    

socketRicezioneQuery.close()
Qualcuno sa come aiutarmi?