给个热点加密码 2020-10-27 19:32 采纳率: 0%
浏览 137

TCP/IP socket通信帧结构封装

socket通信如何封装帧结构

图片说明

这是文档的一部分,这个文档像密码本一样,但我百度了半天。还是不知道怎么拼接。我**原以为**是这样:(客户端代码)

public static void main(String[] args) {
        Socket socket = null;
        try {
            socket = new Socket("127.0.0.1", 8003);
            Scanner in = new Scanner(System.in);
            String str = "68H04H00000000H13H"; //发送的字符
            byte[] bytes = str.getBytes("UTF-8");//转成bytes
            OutputStream os = socket.getOutputStream();
                        //如果输入q则退出
            while (!(in.nextLine()).equals("q")) { 
                os.write(bytes);
            }
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            socket.close();
        }
    }

服务端

try {

                //封装输入流(接收客户端的流)
    BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());

    DataInputStream dis = new DataInputStream(bis);
    byte[] bytes = new byte[1]; // 一次读取一个byte
    String ret = "";
    while (dis.read(bytes) != -1) {
            ret += bytes;
    }
    System.out.println(ret+"\n这是客户端发送的消息");
} catch (Exception e) {
     e.printStackTrace();
} finally {
     System.out.println("client is over");
     if (socket != null) {
       try {
          socket.close();
       } catch (IOException e) {
          e.printStackTrace();
       }
     }
}

但是我发现好像不太对。这行代码到底要怎么改。大佬们教教我

String str = "68H04H00000000H13H"; //发送的字符
  • 写回答

1条回答 默认 最新

  • 不想侮辱小白 2023-06-01 16:26
    关注

    首先你要明确你每一帧中各字段的参数类型,然后使用socket获取到原始stream,通过包装类包装成DataXXStream,再按照对应的位去发送、读取即可。

    评论

报告相同问题?

悬赏问题

  • ¥20 蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏