You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:10:46