首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >服务器应以二进制数据包的形式答复客户端。

服务器应以二进制数据包的形式答复客户端。
EN

Stack Overflow用户
提问于 2021-12-27 14:55:50
回答 1查看 93关注 0票数 0

我有一个模块,应该发送GPS定位到我的服务器。下面我描述了模块和服务器之间的通信方式:

  1. 当模块连接到服务器时,模块发送其IMEI.
  2. ,如果服务器接受数据,则应回复模块01。请注意,确认应以二进制数据包的形式发送。即1字节0x01.

我在第二步努力。试过不同的组合,但都没有用。

代码语言:javascript
运行
复制
client.puts('\x01')
client.send([0x01].pack("C"), 0)
client.write["01"].pack('H*')

下面是一个完整的代码示例:

代码语言:javascript
运行
复制
require 'socket'

class ClientThread
  def initialize(port)
   @server = TCPServer.open(port)
  end

  def run
    puts "Started TCP Server"

    loop do
      Thread.start(@server.accept) do |client|
        2.times do |index|
          data = client.recv(8192)

          if index == 0
            client.send('\x01'.encode('utf-8'), 0) # RESPONSE TO DEVISE THAT SERVER IS READY TO ACCEPT DATA 
          elsif index == 1
            puts self.log("Done! Closing Connection")
            client.close
          else
            client.send('\x00'.encode('utf-8'), 0) # RESPONSE TO DEVISE THAT SERVER IS NOT READY TO ACCEPT DATA
          end

        end # end of loop twice
      end # end of Thread
     end # end of infinite loop
    end # run method
   end # end of class

  new_thread = ClientThread.new(65432)
  p new_thread.run

设备不理解服务器已准备好接受数据。很可能是因为二进制数据包的格式不正确。您是如何形成响应的,以便设备能够理解如何发送普惠制数据?

如果有什么问题请问我。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2021-12-30 11:14:09

我已设法使它发挥作用。我没有使用client.send('\x01'.encode('utf-8'), 0),而是使用了client.puts [0x01].pack("C"),模块开始发送数据。

下面是Teltonika FMT100的完整工作示例。

  1. 模块将其IMEI发送到服务器.

  1. 服务器以二进制数据包0x01.

接受数据和回复

  1. 模块向服务器发送
  2. 数据。此时,您需要对数据进行解码。

要求‘套接字’类ClientThread初始化(端口) @server =TCPServer.open(端口) @imei =“未知”结束def日志(Msg)“{Time.now.utc} #{msg}”end def self.log(“已启动的TCP服务器”)循环do Thread.start(@server.accept)如果客户端有2次做索引区开始数据=client.recv(8192次)如果索引== 0 @imei = data self.log(“设备验证了IMEI:#{@imei}") client.puts 0x01.pack("C") elsif索引== 1 p data.unpack('H*').first p self.log(”完成!(关闭连接) client.close else client.puts 0x00.pack("C")结束拯救IOError p self.log(“流已经关闭”)结束#循环的结束#结束两次,p self.log(‘套接字为空’)结束#如果条件结束#线程结束#无限循环的结束end # run方法new_thread = ClientThread.new(65432) p ClientThread.new

你应该得到类似于:

代码语言:javascript
运行
复制
"2021-12-30 11:12:22 UTC Device Authenticated | IMEI: \u0000\u000F357544374597827"
"00000000000004d608130000017dfcc4f8f8000f1753862097342800000000000000f00c05ef00f0011505c800450205b50000b60000422fbb430fc944000002f100006019100009d77a000000017dfcc5f2f8000f1753862097342800000000000000f00c05ef00f0001504c800450205b50000b60000422fbe430fcb44000002f100006019100009d77a000000017dfcce8a30000f1753862097342800000000000000000c05ef00f0001505c800450205b50000b60000422f6a430fbd44000002f100006019100009d77a000000017dfcce8e18000f1753862097342800000000000000f00c05ef00f0011505c800450205b50000b60000422f78430fc244000002f100006019100009d77a000000017dfccf8430000f1753862097342800000000000000f00c05ef00f0001504c800450205b50000b60000422fbd430fcb44000002f100006019100009d77a000000017dfcdbd488000f1753862097342800000000000000000c05ef00f0001504c800450205b50000b60000422fc0430fcb44000002f100006019100009d77a000000017dfcdbd870000f1753862097342800000000000000f00c05ef00f0011504c800450205b50000b60000422fac430fc744000002f100006019100009d77a000000017dfcdcbee8000f1753862097342800000000000000f00c05ef00f0001504c800450205b50000b60000422fb8430fcb44000002f100006019100009d77a000000017dfcddb500000f1753862097342800000000000000f00c05ef00f0011504c800450205b50000b60000422fb5430fcb44000002f100006019100009d77a000000017dfcdebab8000f1753862097342800000000000000f00c05ef00f0001504c800450205b50000b60000422fbe430fca44000002f100006019100009d77a000000017dfced4948000f1753862097342800000000000000000c05ef00f0001504c800450205b50000b60000422fbe430fc644000002f100006019100009d77a000000017dfced4d30000f1753862097342800000000000000f00c05ef00f0011504c800450205b50000b60000422fbf430fc644000002f100006019100009d77a000000017dfcee3790000f1753862097342800000000000000f00c05ef00f0001504c800450205b50000b60000422fc2430fc644000002f100006019100009d77a000000017dfcefd5a0000f1753862097342800000000000000f00c05ef00f0011504c800450205b50000b60000422fbe430fc644000002f100006019100009d77a000000017dfcf13918000f1753862097342800000000000000f00c05ef00f0001504c800450205b50000b60000422fc1430fc644000002f100006019100009d77a000000017dfcf2b7e8000f1753862097342800000000000000f00c05ef00f0011504c800450205b50000b60000422fb7430fc644000002f100006019100009d77a000000017dfcf3a630000f1753862097342800000000000000f00c05ef00f0001504c800450205b50000b60000422fb8430fc644000002f100006019100009d77a000000017dfd2aac20000f1753862097342800000000000000000c05ef00f0001504c800450205b50000b60000422fa0430fcb44000002f100006019100009d77a000000017dfd61b210000f1753862097342800000000000000000c05ef00f0001504c800450205b50000b60000422f9b430fcb44000002f100006019100009d77a00130000b8e0"
"2021-12-30 11:12:24 UTC Done! Closing Connection"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70497059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档