封裝 發送socket api遇到的坑(涉及數據格式轉換)

發送socketapi封裝(涉及數據格式轉換)


首先說說這個api,在windows環境,給本機的某個端口發送socket,然後這個端口已經被一箇中間件綁定了,這個中間件就給遠程設備發送,然後接受信息,並返回給我。解析信息。就這些!!!
由於就是一個api,思路挺簡單的,記錄下自己踩過的坑吧。

  1. 推薦一個軟件 socketTool ,用這個軟件可以很簡單的發送socket請求,還可以作爲server監控端口,查看收到的socket數據,很方便。
  2. socket發送十六進制和asc碼 要求用socket發送十六進制和asc碼混編的數據。這個愁壞我了,以前都是寫業務系統的,突然整這個,整個人也是懵逼狀態,但是,生活要進行,工作必須要繼續啊。看一下發的東西
    十六進制和asc碼
    然後還有個下行命令,也就是結果。看了半天文檔才知道發送的是什麼。
    直接說坑,發送的是byte字節,但是byte取值範圍-128~127,比如0x80就對應了十進制的128,這裏發送什麼就不知道了。開始的寫法是一個list裏添加byte,然後一起發送,但是發現明明發的是0x80,接收到的卻不是,應該是因爲超過127做的處理,最終是 byte[] 數組,直接賦值 128 ,就可以了。提供一個思路吧,遇見問題還是要按情況處理。
  3. 讀取不結束 socket返回一個InputStream,byte[] 數組去讀取這個流,但是程序就停在這了,也有讀取到數據。結果網上查了資料,這裏需要加is.available() == 0 來判斷是否讀完了。具體記不清是從哪個帖子看到了
  4. 解析十六進制數據 返回的數據也是十六進制和asc碼混編的格式,還好有說明,然後逐個字節去解析,也能拿到結果。0x12解析到string格式,我就要拿到這個12,Integer.toHexString() 方法就可以直接拿到了,0x01拿到的就是1,而不是01。就是,解析0x81,到了十進制就是129了,但是你解析的是byte,結果前面就是 ffffff81 , 然後用 Integer.toHexString( 0x81 & 0xff) ,進行位與運算,去掉前面的內容就好啦。
  5. 考慮業務 最後一個不算是坑了,貼近業務吧。這個api有個功能是獲取設備的使用權,但是已經被佔用使用權的設備會報異常,提示已經被使用。但是你自己佔用的仍然給這種提示。業務上應該是,你自己獲取到了使用權,避免再次獲取程序報異常,應該給返回一個獲取成功,而不是被使用。

僅作爲記錄吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章