遍历列表时误标记已存在项的UDP Chunk重传问题
UDP Chunk重传逻辑异常:已接收Chunk被误标记为缺失
我需要从指定索引开始遍历列表(未遍历至末尾),检查元素是否为None(未接收)或已设置正确的chunk编号,以此确认UDP数据包是否送达;若存在缺失项,则请求重传对应chunk。但当前记录缺失项的tcp_temp_chunks列表中,却包含了实际已存在于chunklist中的项。
相关代码
if response["type"] == "chunk": chunks = response["chunk"] tcp_temp_chunks = [] #tcp_temp_chunks.extend(chunks) #constantly check chunklist to see if the chunks ever got recived over udp time_started = time.time() tcp_temp_chunks = [] while 1: tcp_temp_chunks.clear() start_index = response["chunk"][0] end_index = response["chunk"][-1] for i in range(start_index, end_index): chunk = fileupload.chunklist[i] if chunk is None: tcp_temp_chunks.append(i - start_index) if len(tcp_temp_chunks) > 0: if int((time.time() - time_started) * 1000) > 900: print(tcp_temp_chunks) retransmit = {"type": "retransmit", "chunk": tcp_temp_chunks} tcp_socket.sendall(json.dumps(retransmit).encode()) print("Sent retransmit") print(fileupload.chunklist[:100]) tcp_temp_chunks = [] # reset tcp_temp_chunks after sending retransmit time_started = time.time() continue else: chunk_ack = {"type": "chunkack", "chunk": chunks[-1]} print("a23423") tcp_socket.sendall(json.dumps(chunk_ack).encode()) break
变量说明
response["chunk"]:chunk编号列表,示例格式:{'type': 'chunk', 'chunk': [100, 101, 102,...]}chunklist:全局变量,初始填充与待发送chunk数量一致的None,接收到chunk时会将对应位置的None替换为chunk编号。
已尝试的方案
- 使用
enumerate遍历:enumerate(fileupload.chunklist[response["chunk"][0]:response["chunk"][-1]]) - 使用while循环检查缺失项
- 多次重写代码,但已记不清所有尝试细节
内容的提问来源于stack exchange,提问作者Soup
相关产品推荐
相关产品推荐

