python - 我明白为什么我得到: TypeError: getsockaddrarg: AF_INET address must be tuple, not str
问题描述
Okey,我盯着这两个代码看了很久,一直不明白为什么会收到这个错误:TypeError: getsockaddrarg: AF_INET address must be tuple, not str.
code1.py: 导入套接字 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
import echoUDP
serveraddress = '0.0.0.0'
serverport = 5002
server2 = (server_address, server_port)
s.bind(server2)
print("Listening on " + server_address + ":" + str(server_port))
s.connect(('0.0.0.0',5005))
while True:
client_address = ('0.0.0.0.')
status = 'ok'
print("Echoing back"+ str(status) + " to " + str(client_address))
sen = s.sendto(status.encode(),clientaddress)
回声UDP.py:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = '0.0.0.0'
server_port = 5005
server = (server_address, server_port)
sock.bind(server)
print("Listening on " + server_address + " Port: " + str(server_port))
sock.connect(('0.0.0.0', 5002))
while True:
client_address = ('0.0.0.0')
status = 'ok'
print("Echoing back "+ str(status) + " to " + str(client_address))
sen = sock.sendto(status.encode(),client_address)
有人可以告诉我没有得到什么吗?我已经阅读了有关元组的其他问题,他们得到它是因为他们的 sendto 行,client_address 不是元组。当我写client_address =('0.0.0.0')时,我以为我将它创建为一个元组?
解决方案
第二个参数sock.sendto()
应该是一个包含主机和端口的元组 - 例如('0.0.0.0', 5005)
。所以在你的代码中,使用:
sen = sock.sendto(status.encode(), (server_address, server_port))
顺便说一句,('0.0.0.0')
不是元组。('0.0.0.0',)
将是长度为 1 的元组。在 Python 中创建元组时,括号是可选的 - 逗号的存在告诉 Python 您正在创建一个元组。这些例子应该说明。
a = 1,
type(a)
>>> tuple
b = 1, 2
type(b)
>>> tuple
c = (1)
type(c)
>>>> int
推荐阅读
- azure - Azure 应用程序无法启动并收到 HTTP 500 错误
- swift - 数组没有被洗牌并且屏幕被重绘
- python - 从 API 的多个页面检索的安全数据
- reactjs - 升级到 Gatsby v.2 后组件没有在 React 中呈现,即使我在 Gatsby CLI 中没有错误
- html - 谁能解释一下“在 HTML 中,计算机可以解释包含在 HTML 元素中的原始文本”
- powershell - PowerShell 功能未按计划运行
- c# - 类库中的 C# 重构
- c# - Webservice 更多负载请求有待优化
- java - 类似于 JPanel 的 JFrame.pack() 的东西
- ssh - Pycharm 无法检测图形环境