![](/img/trans.png)
[英]How to read a datainputstream when using a dataoutputstream to write bytes to socket?
[英]how to write bytes to server socket
我正在编写一个Java套接字程序来从服务器读取数据,我无法控制服务器,以下是协议的约定,
例如:如果我的请求是“ command / 1 / getuserlist”,则如何构造以上协议的请求匹配并将响应读回到List
我是套接字编程的新手,也不知道如何构建我的请求并读回响应。
有人可以指导我如何建立请求并从中读取响应
根据规范,您必须按照以下方式构建形状的数据包
| 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
幻数的方法,则由于Java中对short
进行了签名,因此您将无法传递文字幻数> 32767
。
在Socket.getOutputStream()的BufferedOutputStream
周围使用DataOutputStream
。 然后,您可以使用:
writeShort()
writeShort()
write()
。 同样,您可以使用DataInputStream
和相应的readXXX()
方法来读取响应。
注意:您正在此处写入套接字,而不是服务器套接字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.