python套接字错误:AF_INET地址必须是元组,而不是str

时间:2018-02-06 20:21:38

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

我有这个简短的程序:

    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) 时 我也有一个错误:

AfterStep

有什么问题?

2 个答案:

答案 0 :(得分:2)

函数作为参数接收的是一个元组,因此应该将元组作为参数给出。意思是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)

答案 1 :(得分:1)

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

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

Windows 用户将获得

<块引用>

属性错误:模块“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))