首页 > 解决方案 > 我的 tcp 套接字连接的奇怪行为(一段时间后得到错误的数据)

问题描述

我有一个函数getData,我想在while True循环中连续运行。我认为代码没有问题,但我在下面发布了一个片段。当我运行代码时,我有以下奇怪的行为:

我得到了正确的数据,但仅限于特定时间。例如,我得到以下信息dict

{var1: 1290.0, var2: 100000.0, ....}

在一切正常的时间之后,将会有一个输出,例如:

{var2: 12e-39, var2:-1213141412343, ...}

我命名的列表#listofxy仅包含参数的名称,例如

['ControlUnit/1', 'Calc_time(ms)', '时间', ...]

或者对于 dtypes

['Int','Float',...]

#Datapoints是我必须请求为每个变量获取一个值(一个包)的字节数

服务器仅以每秒 8000 个包的速率发送原始数据(float 或 Int 属于变量并在 中标出#listofdtypes)。每个包的每个变量都有一个值。我的电脑与服务器有以太网连接。

所以我不认为服务器有什么问题,因为它给了我正确的数据,直到某个时间。如果我的数据采集/代码出现问题,那么应该更早出现错误,并且每次运行时都不会同时出现错误。另外我不认为有位移,因为我使用了应该保证这一点的 TCP 协议。

我还在我的笔记本电脑上测试了这个程序并遇到了同样的问题。还有一位同事有一个程序可以从我的服务器获取数据并在 linux 上运行他的程序,但他没有这个问题。同时,我认为 windows 有一些奇怪的地方(还没有在 linux 机器上测试过),但我真的不知道。有人知道为什么会发生这种情况吗? 

    def getData(self):

    dataB = b''
    self.vari = {key: [] for key in #listofNames}
    data = {key: [] for key in #listofNames2}

    # get requested number of data bytes
    dataB = dataB + self.sock_data.recv(#Datapoints)

    while len(dataB) != #requestedLenght:
        # check if requested number of data bytes and actual number of data bytes are the same
        dataB = dataB + self.sock_data.recv(1)

    dt_list = list((x, '<i4' if x == 'Int' else '<f4') for x in #listofdtypes)

    for i in range(0, #Datapoints):
        for j in range(0, len(#listofNames)):

    """
    some code to decode the bytes with a numpy.frombuffer function
    """

    for j in range(0, len(#listofNames)):
        data[#listofNames[j] = self.vari[#listofNames[j]]

    return data

标签: pythonsockets

解决方案


推荐阅读