我正在编写一个java套接字程序来从服务器读取数据,我无法控制服务器,下面是约定的协议,
- 2字节:幻数
- 2字节:数据长度
- N 字节:ASCII 字符串数据有效负载
- 幻数和数据长度的大端序
例如:如果我的请求是“command/1/getuserlist”,如何构造符合上述协议的请求并将响应读回列表
我是套接字编程的新手,不知道如何构建我的请求并读回响应。
有人可以指导我如何构建请求并读取响应
根据规范,您必须按以下方式构建一个形状的数据包
| 2 | 2 | N ........ |
现在这可能非常简单,并且有多种方法可以做到这一点,我建议您使用一种:
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
static byte[] buildPacket(int magicNumber, String payload) throws UnsupportedEncodingException
{
// 4 bytes for header + payload
ByteBuffer buffer = ByteBuffer.allocate(2 + 2 + payload.length());
// we set that we want big endian numbers
buffer.order(ByteOrder.BIG_ENDIAN);
buffer.putShort((short)magicNumber);
buffer.putShort((short)payload.length());
buffer.put(payload.getBytes("US-ASCII"));
return buffer.array();
}
public static void main (String[] args) throws java.lang.Exception
{
try
{
byte[] bytes = buildPacket(0xFF10, "foobar");
for (byte b : bytes)
System.out.printf("0x%02X ", b);
}
catch (Exception e)
{
e.printStackTrace();
}
}
请注意,如果您声明该方法接受short
直接幻数,您将无法传递字面幻数> 32767
因为short
是用 Java 签名的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)