如何用Python Socket连接网站端口?解决地址无效报错问题
问题原因及解决方法
你写的代码是服务器端逻辑(用到了bind()和listen()),但你的需求是作为客户端连接远程网站发送指令——这就是报错的核心原因:bind()是用来绑定本地机器的IP/端口,你不能绑定远程的www.google.com,因此触发了地址无效的错误。
正确的客户端实现步骤
- 创建TCP Socket对象
- 调用
connect()方法连接远程服务器的地址和端口 - 向服务器发送符合对应协议的指令(比如80端口是HTTP协议,要发送标准HTTP请求格式)
- 接收服务器返回的响应
- 关闭Socket连接
完整代码示例
import socket HOST = 'www.google.com' PORT = 80 # 创建TCP socket对象 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: # 发起对远程服务器的连接 client.connect((HOST, PORT)) # 发送符合HTTP协议的GET请求(结尾必须加\r\n\r\n作为请求结束标记) request = b"GET / HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n" client.sendall(request) # 循环接收服务器返回的响应数据 response = b"" while True: data = client.recv(1024) if not data: break response += data # 将字节响应转成字符串并打印 print(response.decode('utf-8')) finally: # 确保无论是否出错,都关闭连接 client.close()
关键说明
- 客户端用
connect()发起连接,完全不需要bind()和listen()(这两个是服务器端用来监听本地端口的方法) - 针对80端口的HTTP服务,必须发送符合HTTP规范的请求内容,否则服务器无法识别并处理
- 用
try...finally包裹逻辑,能保证Socket连接在任何情况下都会被正常关闭,避免资源泄漏
内容的提问来源于stack exchange,提问作者jeffrey neils
相关产品推荐
相关产品推荐

