如何将字节写入服务器套接字

how to write bytes to server socket

我正在编写一个 java 套接字程序来从服务器读取数据,我无法控制服务器,下面是约定的协议,

例如:如果我的请求是 "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.

在 `Socket.getOutputStream() 周围使用 DataOutputStream 围绕 BufferedOutputStream。然后你可以使用:

  • writeShort() 为幻数
  • writeShort()为字长
  • write() 用于负载。

同样,您可以使用 DataInputStream 和相应的 readXXX() 方法来读取响应。

注意您正在写入这里的套接字,而不是服务器套接字。

注意大结局!

DataxxxStream - 虽然它非常方便 - 不提供对小端和大端数字以及任意字符串编码的完全支持。

How to Read Byte Stream from Socket

查看我的 post