Python:类型错误:预期的 str、bytes 或 bytearray,而不是 int

科泽罗

我正在尝试为基于客户端的聊天程序创建一个简单的服务器,问题是当我尝试执行c.sendto(data,client)此错误时,出现的错误Client是一个 int 但它是一个包含端口号和地址的元组。我应该将元组转换为字节,以便将消息发送给客户端?

服务器脚本

import socket

clients = []
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("127.0.0.1",7999))
s.listen()
print("Waiting for connection")
c, addr = s.accept()


while True:
    data , addr = c.recvfrom(1024)
    print(data)
    if addr not in clients:
        clients.append(addr)
        print(clients[0])
    if data:
        for client in clients:
            print(client)
            c.sendto(data,client)
s.close()

客户端脚本

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
addr = ("127.0.0.1",7999)
s.connect(addr)    
while True:
    string = input(">>")
    s.send(string.encode("utf-8"))
    data =s.recv(1024)
s.close()

服务器输出

翼器

问题是您将 sendto() 与连接模式套接字一起使用。我想你想要 c.send(data) 代替。

细节:

sendto 的 Python 文档说“套接字不应连接到远程套接字,因为目标套接字是由地址指定的。” sendto 的手册页还说“如果在连接模式(SOCK_STREAM、SOCK_SEQPACKET)套接字上使用 sendto(),则忽略参数 dest_addr 和 addrlen(并且当它们不是 NULL 和 0 时可能会返回错误 EISCONN)。 ” 我有点怀疑这正在发生并且 Python 以一种令人困惑的方式误报了错误。

套接字接口和网络通常会非常混乱,但基本上 sendto() 是为 SOCK_DGRAM 保留的,它是 UDP/IP 类型的互联网流量,您可以将其视为向收件人发送信件或明信片。每个人出门时都带有收件人地址,并且无法保证收货顺序。另一方面,像 SOCK_STREAM 这样的连接模式套接字使用 TCP/IP,这有点像电话,因为您在一定时间内建立连接,并且您发送的每件事都在每一端按顺序传递。

由于您的代码似乎是为通过连接进行通信而设计的,我认为您只需要 c.send(data) 而不是 sendto。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Pycharm预期类型'optional [bytes]'改为'str'

写方法中出现“预期类型'Union [str,bytearray]'相反为'int'”警告

Python3-类型为<class'bytes'>的对象上的“类似字节的对象是必需的,而不是'str'”

Python 3-TypeError:只能将str(不是“ bytes”)连接到str

我不断收到类型错误得到str而不是int

python 3:只能将str(而不是“ bytes”)连接到str

如何解决错误只能将str(而不是“ bytes”)连接到str

类型错误:super() 参数 1 必须是类型,而不是 int (Python)

类型错误:列表索引必须是整数或切片,而不是 str #num 设置为 int

Python - 类型错误:无法排序的类型:str() < int()

类型错误:必须是 str,而不是 int(基本用户)

类型错误:在冒泡排序中必须是 str,而不是 int

类型错误:必须是 str,而不是发生 int 错误

预期的 str、bytes 或 os.PathLike 对象,而不是列表

类型错误:必须是 str,而不是 int;Python

Python——总是得到“必须是str而不是int”

类型错误:预期的 str、bytes 或 os.PathLike 对象,而不是元组

Python3 | 预期类型 'union[bytes, bytearray],取而代之的是 'str'

TypeError:预期的 str、bytes 或 os.PathLike 对象,而不是下载附件时的 NoneType 错误

为什么会发生这个错误?类型错误:只能将 str(不是“int”)连接到 str

类型错误:预期的 str、bytes 或 os.PathLike 对象,而不是方法

Int + Str 类型的python

类型错误:预期的 str、bytes 或 os.PathLike 对象,而不是 FileStorage 不断弹出

类型错误:在使用 Pyinstaller 转换 .py 时预期的 str、bytes 或 os.PathLike 对象,而不是 WindowsPath

类型错误:write() 参数必须是 str,而不是 int 问题

这个 TypeError 来自哪里?(将肌动蛋白用于恒星活动指数)类型错误:预期的 str、bytes 或 os.PathLike 对象,而不是 bool

类型错误:在尝试制作端口扫描器时需要 str、bytes 或 bytearray,而不是 int

Matplotlib 导入错误(预期的 str、bytes 或 os.PathLike 对象,而不是 PosixPath)

预期的 str、bytes 或 os.PathLike 对象,而不是 QuerySet