2010-10-05 7 views
5

Ho visto molti esempi di invio di dati serializzati su socket in Java, ma tutto ciò che voglio è inviare alcuni semplici numeri interi e una stringa. E il problema è che sto cercando di comunicarli a un binario scritto in C.Come posso inviare dati in formato binario su un socket Java?

Quindi, linea di fondo: come posso semplicemente inviare alcuni byte su un socket in Java?

+0

Sei sicuro che il programma C e il programma Java trattino gli input binari e le stringhe allo stesso modo? Se non lo sei, inviale come vecchio testo. Se non hai il controllo del programma C leggendo il socket, non avrai altra scelta se non quella di inviare i dati in qualunque formato sia richiesto dal programma C. –

risposta

4

Consiglio davvero di non utilizzare direttamente la libreria Java Sockets. Ho trovato Netty (di JBoss) molto semplice da implementare e davvero potente. La classe Netty ChannelBuffer ha una vasta gamma di opzioni per scrivere diversi tipi di dati e, naturalmente, può scrivere i tuoi codificatori e decodificatori per scrivere POJO nel flusso, se lo desideri.

Questa pagina è un ottimo inizio - Sono riuscito a creare un client/server abbastanza sofisticato con codificatori e decodificatori personalizzati in meno di 30 minuti a leggere questo: http://docs.jboss.org/netty/3.2/guide/html/start.html.

Se si desidera utilizzare realmente socket Java. Il flusso di output presa può essere avvolto in un DataOutputStream, che ti permette di scrivere molti tipi di dati diversi, come pure, per esempio:

new DataOutputStream(socket.getOutputStream()).writeInt(5); 

Spero che sia utile.

+0

DataOutputStream sembra funzionare correttamente. La mia giornata di lavoro è finita, tornerò su questo domani. – evilpenguin

+0

Attenzione che il collegamento a questo tutorial è per la versione JBoss di Netty. Ciò non corrisponde all'API del download netty.io a cui il tutorial si collega. Usa invece http://netty.io/wiki/user-guide-for-4.x.html – Speakjava

9

È possibile utilizzare il numero semplice OutputStream indicato dallo Socket.
Da lì è possibile write byte.

Se si desidera è anche possibile incapsulare questo flusso in un BufferedOutputStream per avere un buffer.

Problemi correlati