Naprawdę nie zaleca się używania biblioteki Java Sockets bezpośrednio. Zauważyłem, że Netty (od JBoss) jest naprawdę łatwa do wdrożenia i naprawdę potężna. Klasa Netty ChannelBuffer zawiera całą gamę opcji do zapisywania różnych typów danych i oczywiście może pisać własne kodery i dekodery, aby zapisywać POJO w strumieniu, jeśli chcesz.
Ta strona to naprawdę dobry starter - udało mi się stworzyć dość wyrafinowanego klienta/serwer z niestandardowymi enkoderami i dekoderami w czasie poniżej 30 minut, czytając to: http://docs.jboss.org/netty/3.2/guide/html/start.html.
Jeśli naprawdę chcesz korzystać z gniazdek Java. Strumienia wyjściowego gniazda mogą być zapakowane w DataOutputStream który pozwala pisać wiele różnych typów danych, jak również, na przykład:
new DataOutputStream(socket.getOutputStream()).writeInt(5);
Mam nadzieję, że to przydatne.
Czy na pewno program C i program Java traktują binarne znaki i łańcuchy w taki sam sposób? Jeśli nie, wyślij je jako zwykły stary tekst. Jeśli nie masz kontroli nad programem C czytającym gniazdo, nie będziesz miał innego wyjścia, jak tylko wysłać dane w dowolnym formacie, jakiego oczekuje program C. –