制作聊天客户端,不会工作

时间:2016-10-18 19:46:08

标签: python sockets

这里有什么问题我被卡住了:( 如果有帮助,我正在使用 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()

可能是我的服务器我会在需要时输入它! 然后又来了!

1 个答案:

答案 0 :(得分:0)

信息是对的!对aliasmessage进行编码后,它们bytes不是字符串。但是": "是一个字符串,因此是错误。在python 3.x中,字符串是unicode,需要编码为字节以保存到磁盘或在线路上发送。

另一个但是微妙的错误是您使用的是计算机的默认编码,但实际上发送和接收计算机应该就编码达成一致并使用它。 UTF-8是一个不错的选择。

所以,改变

s.sendto(alias.encode() + ": " + message.encode(), server)

s.sendto("{}: {}".format(alias, message).encode('utf-8'), server)