![](/img/trans.png)
[英]How do i remove the square brackets [ ] that are printed with the number in my string
[英]How do I remove the 'b' prefix when my message is printed?
我刚刚开始用Python编写UDP服务器和客户端程序。 我遵循了教程,并添加了一些自己的知识来创建命令行聊天服务器。 一切都按计划进行,除了一件事:当我的客户端向服务器发送消息时,服务器在实际消息之前以ab'打印它。 我的客户收到他的信息,并在前面带有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文档 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.