文明6局域网联机搜索不到人或者卡在检索创建人信息怎么办?
尾巴喵-
2025年10月26日 18:51

局域网联机可能会遇到两个问题,一个是可能配置好局域网了,但是在游戏里搜不到人,一个是能搜索到但是会卡在检索创建人信息里进不去。

第一个问题,【文明6虚拟局域网联机教程(搜不到房间的解决办法)-哔哩哔哩】 网页链接​

这位大佬已经发过文章并做了解释,这儿不再赘述。

第二个问题的话主要因为大多数局域网只建立点对点的隧道连接,,不会把广播包从房主转发给客户端,于是导致游戏一直卡住。于是让ai把上面那位大佬的python脚本做了下优化,让房主的机器把数据转发给所有的客户端,从而建立连接。

使用方法:

1,建立虚拟局域网连接,并且能互相ping通

2,用win+r,输入cmd打开命令提示符(或者在开始菜单里搜索命令提示符打开),输入

pip install psutil

等待下载完成

3,下载一个Idea Shell(或者你有其他可以运行python脚本的软件,程序也可以)

4,创建一个新项目,把下面的代码全部复制上去,ip改成房主的ip,运行即可。

另外,欢迎大家加入522939568游戏群,如果大家有什么问题的话可以来群里聊天,什么游戏都能聊。或者群里也有打包好的文件,大家直接下载即可

===================================================

以下是代码

#先在命令提示符里输入  pip install psutil

#然后改一下房主ip并运行

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

SERVER_VIP_IN_VPN = "1.1.1.1"  # 房主虚拟IP

import logging

import socket

import psutil

import time

from concurrent.futures import ThreadPoolExecutor

FORMAT = '%(asctime)-15s %(levelname)-10s %(message)s'

logging.basicConfig(format=FORMAT)

LOGGER = logging.getLogger()

LOGGER.setLevel(logging.INFO)

BUFFER_SIZE = 4096

GAME_NAME = "CivilizationVI.exe"

# ---------------------------------------------------------------------------

def ip_to_tuple(ip):

  ip, port = ip.split(':')

  return (ip, int(port))

def udp_proxy(bind, dst):

  """

  UDP代理函数,支持多个客户端

  bind: 本地监听端口,例如 "0.0.0.0:62900"

  dst: 服务器地址,例如 "10.185.147.12:62900"

  """

  proxy_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

  proxy_socket.bind(ip_to_tuple(bind))

  server_ip, server_port = ip_to_tuple(dst)

  LOGGER.info(f"[代理启动] 本地绑定 {bind} → 服务器 {server_ip}:{server_port}")

  clients = {} # key=client_ip, value=port

  while True:

    try:

      data, (ip, port) = proxy_socket.recvfrom(BUFFER_SIZE)

      # 如果是客户端发来的包

      if ip != server_ip:

        clients[ip] = port # 更新/新增客户端端口

        proxy_socket.sendto(data, (server_ip, server_port))

      # 如果是服务器发来的包

      elif ip == server_ip:

        for c_ip, c_port in clients.items():

          proxy_socket.sendto(data, (c_ip, c_port))

      else:

        LOGGER.debug(f"未知来源 {ip}:{port}")

    except Exception as e:

      LOGGER.warning(f"错误: {e}")

      time.sleep(1)

# ---------------------------------------------------------------------------

def find_game_udp_ports():

  """查找文明6使用的UDP端口"""

  ports = set()

  for conn in psutil.net_connections(kind="udp"):

    if conn.pid:

      try:

        p = psutil.Process(conn.pid)

        if GAME_NAME.lower() in p.name().lower():

          ports.add(conn.laddr.port)

      except (psutil.NoSuchProcess, psutil.AccessDenied):

        continue

  return sorted(list(ports))

# ---------------------------------------------------------------------------

def monitor_and_proxy():

  """持续检测文明6端口,并启动对应的代理"""

  active_ports = set()

  executor = ThreadPoolExecutor()

  while True:

    ports = find_game_udp_ports()

    new_ports = set(ports) - active_ports

    for port in new_ports:

      LOGGER.info(f"检测到新端口 {port},启动UDP代理...")

      executor.submit(udp_proxy, f"0.0.0.0:{port}", f"{SERVER_VIP_IN_VPN}:{port}")

    if new_ports:

      LOGGER.info(f"当前已代理端口: {sorted(active_ports | new_ports)}")

    active_ports |= new_ports

    time.sleep(5)

# ---------------------------------------------------------------------------

if __name__ == "__main__":

  LOGGER.info("=== 文明6 N2N UDP自动代理启动(多客户端支持) ===")

  monitor_and_proxy()