私はクライアントベースのチャットプログラムにシンプルなサーバーを作成しようとしていますが、問題はc.sendto(data,client)
を実行しようとするとClient
がintポート番号とアドレスを含むタプルです。私はタプルをバイトに変換してクライアントにメッセージを送ることができますか?Python:TypeError:str、bytesまたはbytearrayが予期せぬintではない
サーバースクリプト
import socket
clients = []
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("127.0.0.1",7999))
s.listen()
print("Waiting for connection")
c, addr = s.accept()
while True:
data , addr = c.recvfrom(1024)
print(data)
if addr not in clients:
clients.append(addr)
print(clients[0])
if data:
for client in clients:
print(client)
c.sendto(data,client)
s.close()
クライアントスクリプト
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
addr = ("127.0.0.1",7999)
s.connect(addr)
while True:
string = input(">>")
s.send(string.encode("utf-8"))
data =s.recv(1024)
s.close()
エラーを発生させる前にサーバが2つのクライアントを表示しているようです。つまり、最終的なforループが何も問題なく実行された場合、クラッシュすることがありますか? – Trolldejo
'client [0] = str(client [0])'を設定するとどうなるでしょうか? – Trolldejo
@Trolldejoいいえ、それは同じサイクルで2回しか印刷されません。今は自分のコードを編集できませんが、あなたが示唆したように行います。 – Kozero