我正在尝试使用python中的Socket编程进行选择性重复。但是,当我尝试将错误的帧发送到服务器端时,程序陷入了服务器端。撤消更改后,程序运行正常,但是当我在将数据发送到服务器端的客户端代码中添加最后一行时,整个程序将停止。这是代码:
服务器端:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 1235))
s.listen(5)
print("Waiting for Connection")
data = [11, 20, 30, 40, 55, 33, 56, 22]
data_lenght = len(data)
while True:
clientsocket, address = s.accept()
print("Connection is established")
clientsocket.send(str(data_lenght).encode("utf-8"))
for i in data:
clientsocket.send(str(i).encode("utf-8"))
wrong_frame_pos = clientsocket.recv(1024)
print(wrong_frame_pos.decode("utf-8"))
clientsocket.close()
客户端:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 1235))
received_data = []
lenght_data = s.recv(1)
lenght_data = int(lenght_data.decode("utf-8"))
print(f"the lenght of the stream is {lenght_data}")
while True:
number = s.recv(2)
if len(number) < 1:
break
number = float(number.decode("utf-8"))
print(number)
received_data.append(int(number))
received_data[3] = -1
for i in range(len(received_data)):
print(f"the recieved frame is {received_data[i]}")
if received_data[i] == -1:
wrong_frame = i
s.send(str(wrong_frame).encode("utf-8"))
预先感谢您!!!!