[英]Multi Bit TCP Request in Java
我正在嘗試以Java向現有TCP服務器發出tcp請求。 接口規范為:
Field Length Type
Length 2 bytes 16-bits binary
Message ID 1 byte 8-bits binary
MSGTYPE 1 byte 8-bits binary
Variable1 4 bytes 32-bits binary
Variable2 30 bytes ASCII
Variable3 1 byte 8-bits binary
我了解如何使用BigInteger將String轉換為Binary。
String testing = "Test Binary";
byte[] bytes = testing.getBytes();
BigInteger bi = new BigInteger(bytes);
System.out.println(bi.toString(2));
我的理解是,如果我想發出TCP請求,我會先
不幸的是,我的理解是有限的,所以我想要一些有關正確創建TCP請求的建議。
我不會使用String(因為您有二進制數據),StringBuffer(曾經)或BigInteger(因為它不是為它設計的)。
假設您有一個Big Endian數據流,我將使用DataOutputStream
DataOutptuStream out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
out.writeShort(length);
out.write(messageId);
out.write(msgtype);
out.write((var1+"\0\0\0\0").substring(0, 4).getBytes("ISO-8859-1"));
out.write(var2.getBytes("ISO-8859-1"));
out.write(var2);
out.flush(); // optionally.
如果您有一點端序協議,則需要使用ByteBuffer,在這種情況下,我將使用阻塞NIO SocketChannel。
順便說一句,我會使用ISO-8859-1
(8位字節)而不是US-ASCII
(7位字節)
您走錯了方向。 消息規范指出例如第一個字段是16位二進制文件這一事實並不意味着您將發送二進制字符串。 您將只發送一個(無符號?)16位數字,實際上,該數字將被編碼為二進制,因為它的內部表示形式可能就是那個。
當通過DataOutputStream
寫入套接字時,例如
int value = 123456;
out.writeInt(value);
您已經用二進制文件編寫了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.