在另一个函数中调用套接字连接时失败

2024-09-22 18:28:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图做一个程序,模拟一个完全连接的网络

我计划创建线程来表示网络中的节点,每个节点都必须相互发送和接收消息

我指定总共有9个节点

对于每个节点,我都有一个函数run(),它将指定每个节点(线程)的任务


def establish_c(input_id, maxS, local_conns, curr_port):
  incr = 0
  while (incr < id):
      tmpS = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      curr_port += 1
      tmpS.bind((ip, curr_port))
      tmpS.connect((ip, basePort + incr*100  + 1))
      local_conns.append(tmpS)
      incr += 1

   while (incr < maxS - 1):
      conn, addr = local_l.accept()
      local_conns.append(conn)
      incr += 1

   return

def run(*input):
   .... // Other code here, and also set up the input values for establish_c

   if True:
      establish_c(id, maxS, local_conns, curr_port)

上述代码不起作用,将显示一个错误:

error: [Errno 111] Connection refused


但是,如果将建立_c()中的代码附加到run()中的代码上,则每个连接都可以正常工作


def run(*input):
    incr = 0
    while (incr < id):
        tmpS = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        curr_port += 1
        tmpS.bind((ip, curr_port))
        tmpS.connect((ip, basePort + incr*100  + 1))
        local_conns.append(tmpS)
        incr += 1

    while (incr < maxS - 1):
        conn, addr = local_l.accept()
        local_conns.append(conn)
        incr += 1

我不明白为什么会这样


Tags: runipidinput节点portlocalsocket