gpt4 book ai didi

python - 如何在打印消息时删除 'b' 前缀?

转载 作者:行者123 更新时间:2023-11-28 22:33:03 25 4
gpt4 key购买 nike

我刚开始用 Python 编写 UDP 服务器和客户端程序。我按照教程并添加了一些自己的知识来创建命令行聊天服务器。一切都按计划进行,除了一件事:当我的客户端向服务器发送消息时,服务器会在实际消息前面打印一个 b'。我的客户将他的消息发回给他,前面带有 b'。我试过在客户端解码消息,但它从未发送过。当服务器要发回消息时,我尝试解码消息,但它永远不会发回客户端。我想要删除它的原因是因为它破坏了我想要的程序外观。感谢您的任何帮助!下面是我的代码,首先是服务器,然后是客户端。在我的代码之后,我粘贴了一些我得到的输出,这样你就可以准确地看到我在说什么。

#Server   

from socket import *
import time

address = input("IP Address: ")
port = input("Port: ")

clients = []

serversock = socket(AF_INET, SOCK_DGRAM)
serversock.bind((address, int(port)))
serversock.setblocking(0)

quitting = False
print("Server is up and running so far.")

while not quitting:
try:
data, addr = serversock.recvfrom(1024)
if "Quit" in str(data):
quitting = True
if addr not in clients:
clients.append(addr)
print(time.ctime(time.time()) + str(addr) + ": :" + str(data))
for client in clients:
serversock.sendto(data, client)
except:
pass
serversock.close()

#Client

from socket import *
import threading
import time

tLock = threading.Lock()
shutdown = False

def receiving(name, sock):
while not shutdown:
try:
tLock.acquire()
while True:
data, addr = sock.recvfrom(1024)
print(str(data))
except:
pass
finally:
tLock.release()

address = input("IP Address: ")
port = 0

server = address, 6090

clientsock = socket(AF_INET, SOCK_DGRAM)
clientsock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
clientsock.bind((address, int(port)))
clientsock.setblocking(0)

rT = threading.Thread(target=receiving, args=("RecvThread", clientsock))
rT.start()

nick = input("How about we get you a nickname: ")
message = input(nick + "> ").encode()
while message != "q":
if message != "":
clientsock.sendto(nick.encode() + "> ".encode() + message, server)
tLock.acquire()
message = input(nick + "> ").encode()
tLock.release()
time.sleep(0.2)

shutdown = True
rT.join()
clientsock.close()

服务器如何接收消息: 2016 年 10 月 30 日星期日 18:23:22('192.168.1.66', 61249): :b'jake> jake'

最佳答案

您发送/接收的数据是字节数组,因此您需要对它们进行解码以获得不带 b'' 的字符串。
您只需使用 print(data.decode()) 即可获得正确的输出。如果您未指定任何编码,则默认行为是使用 utf8(有关详细信息,请参阅 python doc)

关于python - 如何在打印消息时删除 'b' 前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40335581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com