【问题标题】:python socket error: AF_INET address must be tuple, not strpython套接字错误:AF_INET地址必须是元组,而不是str
【发布时间】:2023-03-20 10:21:01
【问题描述】:

我有这个小程序:

import sys
import socket

target = "google.co.uk"
port = 443
print(target)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(target)
print("successfull connection to: " + target)

当我运行代码时,我得到:

    s.connect(target)
TypeError: getsockaddrarg: AF_INET address must be tuple, not str

当我尝试将行更改为:s.connect(target,443) 我也遇到了一个错误:

    s.connect(target,443)
TypeError: connect() takes exactly one argument (2 given)

有什么问题?

【问题讨论】:

    标签: python sockets networking socket.io network-programming


    【解决方案1】:

    函数作为参数接收的是一个元组,因此应该将一个元组作为参数给出。意思是 f(a,b)f((a,b)) 调用函数

    因此,我们像这样修复您的代码:

    import sys
    import socket
    
    target = "google.co.uk"
    port = 443
    print(target)
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((target, port))
    print("successfull connection to: " + target)
    

    【讨论】:

      【解决方案2】:

      我遇到了同样的错误。从 PyMySQL 的 connections.py 文件中,有一个名为 connect() 的函数与

      sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
      sock.settimeout(self.connect_timeout)
      sock.connect(self.unix_socket)
      

      Windows 用户将获得

      AttributeError: 模块 'socket' 没有属性 'AF_UNIX'

      fix it 应将第一行更改为

      sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      

      这会得到

      File "C:\Users\tiago\Desktop\dev\venv\lib\site-packages\pymysql\connections.py", line 609, in connect
          sock.connect(self.windows_socket)
      TypeError: connect(): AF_INET address must be tuple, not str
      

      基于this answer,只需将第三行改为

      sock.connect((self.unix_socket))
      

      所以你应该有

      sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      sock.settimeout(self.connect_timeout)
      sock.connect((self.unix_socket))
      

      【讨论】:

      • 如果只有一个元素,则需要在元组的第一项之后添加逗号,否则 python3 会将该项周围的括号解释为多余的,并将参数读取为字符串。跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 2021-09-08
      • 2018-09-13
      • 2019-01-10
      • 2020-11-22
      • 2016-06-25
      相关资源
      最近更新 更多