2
私は基本的なチャットプログラムをプログラミングしています。これの目標は、まずserver.pyスクリプトを起動して、バックグラウンドで実行しておくことです。次に、ユーザーがclient.pyスクリプトを起動し、名前を選択してからメッセージを入力して送信します。問題は、送信しようとすると、このエラーが返されます。Pythonエラー:暗黙的にバイトを文字列に変換できません
Traceback (most recent call last):
File "C:\Users\Hello\AppData\Local\Programs\Python\Python35-32\client.py", line 38, in <module>
s.sendto(alias + ': ' + message.encode() , server)
TypeError: Can't convert 'bytes' object to str implicitly
ここserver.pyスクリプトは、client.pyスクリプトは
import socket
import time
host = '127.0.0.1'
port = 47015
clients = []
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))
s.setblocking(0)
qutting = False
print("Server Started")
while not qutting:
try:
data, addr = s.recvfrom(1024)
if 'Quit' in str(data):
qutting = True
if addr not in clients:
clients.append(addr)
print(time.ctime(time.time()) + str(addr) + ": :" + str(data))
for client in clients:
s.sendto(data, client)
except:
pass
s.close()
---だ----
import socket
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)
data.decode()
print(str(data))
except:
pass
finally:
tLock.release()
host = '127.0.0.1'
port = 0
server = ("127.0.0.1", 47015)
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 + ': ' + message.encode() , server)
tLock.acquire()
message = input(alias + '->')
tLock.release()
time.sleep(0.2)
shutdown = True
rT.join()
s.close()
だから、どのように任意のアイデアを持っている場合この問題を解決するには、受信側のスレッドが常に実行されるようにしてチャットを積極的に更新する方法がありますか?