Читайте в классе java.net.Socket.
Upd: getOutputStream () предоставляет вам экземпляр OutputStream. Вы можете записать байтовые массивы прямо в него. Чтобы моделировать типы данных C, вам придется разбивать переменные на байты, используя операторы shift и mask. Например, чтобы написать int (предполагая, что он имеет младший порядок в проводнике), используйте:
int n;
MyOutStream.write(new byte[]{n&0xff, (n>>8)&0xff, (n>>16)&0xff, (n>>24)&0xff});
Для строк используйте toByteArray () с соответствующей кодировкой («US-ASCII» не уверен).
Существует также класс DataOutputStream, который может сделать то же самое для вас, но IIRC записывает небольшой заголовок перед данными, поэтому данные проводов будут несовместимы с существующим протоколом.