تو این لینک یک نمونه رو نوشته برای Client و Server:
https://www.tutorialspoint.com/java/java_networking.htm
شما کافیه داده هاتون رو در یک آرایه بریزید و اون آرایه رو با out.write که در مثال بالا اومده بفرستید (اونجا نوشته out.writeUTF که شما از اون استفاده نکنید).
مثلا در این مثال شما 57 بایت داده دارید. 5 تا 4 بایت اول که همگی عدد هستند و اعداد صحیح در جاوا 4 بایتی هستند، پس مشکلی ندارید. سه تا مقدار بعدی چون گفته octet String که منظورش هر کاراکتر یک بایت، کافیه 8 بیت کم ارزش کاراکترهاتون رو ذخیره کنید (برای ASCII همین 8 بیت کم ارزش کافیه ولی برای حروف فارسی و... کافی نیست که طبق سوال مشخصه بقیه رو نمیخواد) و آخریش هم که باز عدده.
شما کافیه فقط پارامترها رو مقدار دهی کنید. دیگه اینکه هر پارامتر چی رو میخواد بگه رو نمیدونم و بسته به سوالتون هست.
یک مثال میزنم. فرض کنید من چنین چیزی دارم:
Length - 4 byte - length of whole package
USER - 11 byte - octet string of username
PASS - 13 byte - octet string of password
از اونجایی که در این مثال اندازه همیشه ثابته، پس Length هم همیشه ثابت خواهد بود و مثلا تو این مثال 28
اینم یک نمونه کد که ببینی چجوری عددها و رشته ها رو به آرایه های با سایز مشخص تبدیل کنیم. شما کافیه بقیه مقادیرتون رو آماده کنید و به این صورت قرار بدید. در مثال شما length=57 قرار بدید.
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) {
int length = 28;
String user = "MyUsername", pass="MyPassword";
ByteBuffer byteBuffer=ByteBuffer.allocate(length);
byteBuffer.putInt(length);
byteBuffer.put(fixedSizeByteArray( user.getBytes( StandardCharsets.US_ASCII ) ,11));
byteBuffer.put(fixedSizeByteArray( pass.getBytes( StandardCharsets.US_ASCII ) ,13));
for(int j=0;j<length;j++){
System.out.print(byteBuffer.get(j)+" ");
}
}
private static byte[] fixedSizeByteArray(byte[] arr,int size){
byte[] fixedArray=new byte[size];
for(int i=0;i < arr.length && i<size;i++){
fixedArray[i]=arr[i];
}
return fixedArray;
}
}