|
10鱼币
本帖最后由 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()) # 机器也要礼貌一点[doge]
- 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()) # 机器也要礼貌一点[doge]
- 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,我如果有空的话就能教你。
|
最佳答案
查看完整内容
socket 模块不是你这样玩的,你用我给你改好的代码就行了,吧connect连接的地址改成你的域名和端口就好了。
接收端代码:
发送端代码:
顺便宣传我的网站: puddingcat.top:9999 ,是用 pyqt5 + flask +python爬虫 + mysql + html5 + css3 + js 制作的。
来注册个账号你就是老用户了,想学习加qq 547840062,我如果有空的话就能教你。
|