1. 程式人生 > >socket連線讀取服務端傳的資料加校驗,儲存excel表格

socket連線讀取服務端傳的資料加校驗,儲存excel表格

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)