Python:TypeError:应为str,字节或字节数组,而不是int
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python:TypeError:应为str,字节或字节数组,而不是int,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1625字,纯文字阅读大概需要3分钟。
内容图文
![Python:TypeError:应为str,字节或字节数组,而不是int](/upload/InfoBanner/zyjiaocheng/691/01467232f39946f284a6e8404fce7f62.jpg)
我正在尝试为基于客户端的聊天程序创建一个简单的服务器,问题是当我尝试执行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保留的,SOCK_DGRAM是UDP / IP类型的互联网流量,您可以将其视为向接收者发送信件或明信片.每个人都带有收件人地址,并且不能保证收货顺序.另一方面,诸如SOCK_STREAM之类的连接模式套接字使用TCP / IP,这有点像电话,因为您在一定时间范围内建立了连接,并且发送的每个东西都按顺序传递.
由于您的代码似乎是为通过连接进行通信而设计的,因此我认为您只需要c.send(data)而不是sendto.
内容总结
以上是互联网集市为您收集整理的Python:TypeError:应为str,字节或字节数组,而不是int全部内容,希望文章能够帮你解决Python:TypeError:应为str,字节或字节数组,而不是int所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。