你好,我是网络领域的新手,并且在Python中使用套接字 我试图访问函数frame_reception_function(),但出现错误“ OSError:[Errno 98]地址已在使用中” 在forward_send_received()中,我正在使用线程调用四个不同的函数,因为在我的工作中,可以从上一个节点接收该请求帧的该节点,并且还需要将该帧转发到下一个节点,并且还从下一个节点接收数据帧,并且发送到上一个节点。因此它从两侧收到了两个。如何访问相同的套接字。我也正在关闭连接,但不起作用。 有人可以帮我删除以上错误(地址已在“已使用”中吗)
def frame_reception_function ():
print ("starting of frame reception")
PORT = 12345
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind(('',PORT))
s.listen(1)
conn,address=s.accept()
message=conn.recv(1024).decode()
conn.close()
recv_message=message.split(';')
message_type=recv_message[0]
if (received_message=='req_status'):
print ('Received Message is req_status')
previous_ip=recv_message[1]
return message_type,previous_ip,recv_message
else:
print ("received message is :",received_message)
print ("Received from:",recv_message[4])
ip=recv_message[4]
#cmd = "arp -n " + str(ip) + " | awk '/" + str(ip) + "/{print $3}'" # Can we extract MAC address from IP instead of Broadcast address???
#x = os.popen(cmd).read().strip()
return recv_message[0],ip,recv_message
def forward_send_received():
Frame_type,ip_address,received_message=frame_reception_function ()
print ("after while")
print (Frame_type)
print (Frame_SrcAddr)
print (ip_address)
print (received_message)
if (Frame_type=="req_status"):
if (not Req_Frame_Relayed): # Check Req_Frame_status
forward_req_status_frame()
Req_Frame_Relayed=True
Probabilistic_Reliable_Broadcast(Frame_type)
Send_Data_status_frame()
Probabilistic_Reliable_Broadcast("current_node_data")
else:
if (Frame_SrcAddr not in Resp_forwarded_set):
Resp_forwarded_set()
forward_Data_status_frame(received_message)
Resp_number=Resp_number+1
Probabilistic_Reliable_Broadcast(Frame_type)
while (time.time()-start_time<Status_collecting_time_interval) and (Resp_number<Nmax):
print ("starting of while ")
Thread(target=forward_send_received).start()