Python中Socket函数无法识别主机名的问题求助
解决客户端连接类IRC服务器时的主机名未定义问题
看起来你踩了一个很常见的Python字符串使用坑!错误提示“(my device name) is not defined”说明你在客户端代码里把设备名称当成了变量,而不是字符串传递给socket的连接方法了——Python会试图去找名为这个设备名的变量,但你根本没定义过它,所以报错。
下面给你几个可行的修改方案:
方案1:用字符串包裹设备名称
直接把服务器的设备名用双引号或单引号括起来,作为字符串参数传入connect()方法。比如你的设备名是MyDesktop,客户端代码应该写成这样:
import socket client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 关键:把主机名放在引号里,告诉Python这是字符串 client_sock.connect(("MyDesktop", 12345)) # 替换成你服务器用的端口号
方案2:用IP地址替代主机名(更可靠)
有时候主机名解析可能出问题,直接用服务器的IP地址会更稳定。你可以在服务器端运行socket.gethostbyname(socket.gethostname())获取它的本地IP,然后客户端直接用这个IP连接:
# 客户端示例 client_sock.connect(("192.168.3.10", 12345)) # 替换成你的服务器IP和端口
方案3:本地测试用localhost
如果只是在同一台机器上测试客户端和服务器,直接用"localhost"或者"127.0.0.1"是最省心的,完全不用管设备名:
client_sock.connect(("localhost", 12345))
额外验证提示
别忘了确认你的服务器代码是正确绑定地址的,比如服务器应该这样写:
import socket server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = socket.gethostname() port = 12345 server_sock.bind((host, port)) # 绑定到设备名对应的地址 server_sock.listen(5)
如果要让服务器能被局域网内其他设备访问,可以把绑定地址改成"0.0.0.0",这样服务器会监听所有可用的网络接口。
内容的提问来源于stack exchange,提问作者Kurbus
相关产品推荐
相关产品推荐

