当我运行以下代码来确定设备的本地 IP 地址时,我得到 127.0.0.1 而不是 192.168.0.101。
import socket
import threading
PORT = 8080
HOST_NAME = socket.gethostname()
print(HOST_NAME)
SERVER = socket.gethostbyname(HOST_NAME)
print(SERVER)
我在控制台上得到的输出是
MyDeviceName.local
127.0.0.1
127.0.0.1是localhost地址,没错。如果您想要设备的地址,请执行以下操作:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
print(s.getsockname()[0])
试试这个:
注意 - 使用 Python 3.6.8 在 CentOS 7.9 上测试,使用 Python 3.8.10 在 Ubuntu 20.04 上测试
注意 - 使用 Ubuntu 20.04 时可能需要安装 psutil
import socket
import psutil
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
my_eip = s.getsockname()[0]
nics = psutil.net_if_addrs()
my_enic = [i for i in nics for j in nics[i]
if j.address == my_eip and j.family == socket.AF_INET][0]
print('My Ethernet NIC name is {0} and my IPv4 address is {1}.'.format(
my_enic, my_eip))
输出:
My Ethernet NIC name is enp0s3 and my IPv4 address is 192.168.0.101.
这解决了我的问题。只需将“.local”添加到 HOST_NAME
import socket
import threading
PORT = 8080
HOST_NAME = socket.gethostname()
print(HOST_NAME)
SERVER = socket.gethostbyname(HOST_NAME+".local")
print(SERVER)