这里有什么问题我被卡住了:( 如果有帮助,我正在使用 3.4.4 我已经尝试了一切!我甚至搜索过这个!它一直在说:
Traceback (most recent call last):
File "C:\Users\matthew\Desktop\chatclient.py", line 36, in <module>
s.sendto(alias.encode() + ": " + message.encode(), server)
TypeError: can't concat bytes to str
以下是代码:
import socket
import _thread
import threading
import time
tLock = threading.Lock()
shutdown = False
def recieving(name, sock):
while not shutdown:
try:
tLock.acquire()
while True:
data.addr = sock.recvfrom(1024).decode()
print (str(data))
except:
pass
finally:
tLock.release()
host = '127.0.0.1'
port = 0
server = ('127.0.0.1', 5000)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))
s.setblocking(0)
rT = threading.Thread(target=recieving, args=("recvthread", s))
rT.start()
alias = input("Name: ")
message = input(alias + "-> ")
while message != 'q':
if message != '':
s.sendto(alias.encode() + ": " + message.encode(), server)
tLock.acquire()
message = input(alias + "-> ")
tLock.release()
time.sleep(0.2)
shutdown = True
rT.join()
s.close()
可能是我的服务器我会在需要时输入它! 然后又来了!
答案 0 :(得分:0)
信息是对的!对alias
和message
进行编码后,它们bytes
不是字符串。但是": "
是一个字符串,因此是错误。在python 3.x中,字符串是unicode,需要编码为字节以保存到磁盘或在线路上发送。
另一个但是微妙的错误是您使用的是计算机的默认编码,但实际上发送和接收计算机应该就编码达成一致并使用它。 UTF-8是一个不错的选择。
所以,改变
s.sendto(alias.encode() + ": " + message.encode(), server)
到
s.sendto("{}: {}".format(alias, message).encode('utf-8'), server)