如何使用线程访问套接字以进行多次接收

时间:2018-06-26 13:02:03

标签: python-3.x sockets network-programming communication serversocket

你好,我是网络领域的新手,并且在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()

0 个答案:

没有答案