socket連線讀取服務端傳的資料加校驗,儲存excel表格
阿新 • • 發佈:2018-12-06
import socket # 匯入 socket 模組 import time import datetime from openpyxl import Workbook,load_workbook sid=1 wb=Workbook() # sheetnames = wb.get_sheet_names() # # ws=wb.get_sheet_by_name(sheetnames[0]) ws = wb.worksheets[0] def writerxl(time1,data,che): '''資料寫入excel表''' global sid ws.cell(row=sid, column=1).value = time1 ws.cell(row=sid, column=2).value = data ws.cell(row=sid, column=3).value = che sid+=1 wb.save("新網口通訊1.xlsx") def check(long,data): '''資料校驗''' if long == data[5]: z = data[0] for i in range(long): if i<long - 3: z=z^data[i+1] else: break if z==data[long - 1]: print('校驗成功') return "校驗成功" else: print('校驗失敗') return"校驗失敗" else: return"資料出錯" def hexShow(argv): '''資料解析''' result='' hlen = len(argv) for i in range(hlen): hvol = argv[i] hhex = '%02x'%hvol result += hhex + ' ' # socket.setdefaulttimeout(timeout) # 這裡對整個socket層設定超時時間。後續檔案中如果再使用到socket,不必再設定 print ('%s:' % x, result) che=check(hlen,argv) writerxl(x, result,che) s = socket.socket() # 建立 socket 物件 host = '192.168.8.183' # 獲取本地主機名 port = 4001 # 設定埠好 s.connect((host, port)) k=0 while True:#接收資料 data=s.recv(6) if data and len(data)==6:#防粘包 z=data[5] data1=s.recv(z-6) else: continue data=data+data1 x=datetime.datetime.now() hexShow(data)