Python的Socket报出异常的问题
本帖最后由 Robot_Steve 于 2022-5-2 10:02 编辑用Python的Socket库,结果报出了这个异常:
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 510-511: unexpected end of data
我用send的时候报出的。
我发现这个东西很令人迷惑。在传入send的字符串较少的情况下不会报错。一旦超过阀值(好像是异常里的510)就会报错。
不知道怎么解决,望各位大佬可以帮个忙
注:我进行了内网穿透,将自己的电脑变成了服务器
import socket
ip_port = ('127.0.0.1', 42093)
sk = socket.socket()
sk.bind(ip_port)
sk.listen(20)
while True:
conn, addr = sk.accept()
while True:
try:
message = conn.recv(1024)
except:
break
else:
# 接收信息
text = message.decode(encoding='utf-8')
if text == "Break":# 客户端发来退出请求
conn.send("Thanks".encode()) # 机器也要礼貌一点
break
msg = 【此处省略1000字的字符串】
#发送信息
conn.send(bytes(msg, "utf8"))
conn.close()
import socket
class Network:
def __init__(self):
# Socket
self.client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.client.connect(('dsx2jkr.nat.ipyingshe.com', 37630))
def receive(self, info):
while True:
self.client.send(info.encode()) # 发送信息
""" 接收返回的信息 """
message_data = self.client.recv(1024)
text = str(message_data, "utf8")
return text
net = Network()
ret = net.receive("homepage")
net.close()
net = Network()
net.receive("Break")
net.close()
本帖最后由 nahongyan1997 于 2021-8-9 09:35 编辑
socket 模块不是你这样玩的,你用我给你改好的代码就行了,吧connect连接的地址改成你的域名和端口就好了。
接收端代码:
import socket
ip_port = ('', 42093)
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.bind(ip_port)
sk.listen(20)
while True:
conn, addr = sk.accept()
data = b""
while True:
message = conn.recv(1024)
data += message
if len(message) < 1024:
break
# 接收信息
text = message.decode(encoding='utf-8')
print(text)
if text == "Break":# 客户端发来退出请求
conn.send("Thanks".encode()) # 机器也要礼貌一点
msg = "【此处省略1000字的字符串】"
#发送信息
conn.send(bytes(msg, "utf8"))
conn.close()
发送端代码:
import socket
class Network:
def __init__(self):
# Socket
self.client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.client.connect(('127.0.0.1', 42093))
def receive(self, info):
self.client.send(info.encode()) # 发送信息
""" 接收返回的信息 """
data = b""
while True:
message = self.client.recv(1024)
data += message
if len(message) < 1024:
break
print(data.decode())
net = Network()
ret = net.receive("homepage")
net.receive("Break")
顺便宣传我的网站: puddingcat.top:9999 ,是用 pyqt5 + flask +python爬虫 + mysql + html5 + css3 + js 制作的。
来注册个账号你就是老用户了,想学习加qq 547840062,我如果有空的话就能教你。 你设定的空间不就是1024吗,超出肯定不行啊 我百度翻译了你的报错:
“utf-8”编解码器无法解码位置510-511的字节:数据意外结束
我感觉把 text = message.decode(encoding='utf-8') 去掉或改成 gbk 试试
试试这个 大马强 发表于 2021-8-7 07:27
我百度翻译了你的报错:
“utf-8”编解码器无法解码位置510-511的字节:数据意外结束
我感觉把 text = me ...
我试试 wp231957 发表于 2021-8-7 07:27
你设定的空间不就是1024吗,超出肯定不行啊
之前指定的是5012,也不行{:10_277:} 大马强 发表于 2021-8-7 07:29
试试这个
没用的 Robot_Steve 发表于 2021-8-7 09:08
没用的
啊在,盲区了{:10_266:} 大马强 发表于 2021-8-7 07:27
我百度翻译了你的报错:
“utf-8”编解码器无法解码位置510-511的字节:数据意外结束
我感觉把 text = me ...
百度上的基本没用,是不是send有什么坑? 是不是内网穿透的原因,他是不是数据量超出了自动分段,你分段发送试试 Robot_Steve 发表于 2021-8-7 09:16
百度上的基本没用,是不是send有什么坑?
百度上没有的东西找我就对了
页:
[1]