Не отправляется сообщения от клиента к серверу через socket
Решил сделать простенький чат client-server с использованием tkinter для клиента, чтобы была визуализация самого чата. Сервер подтверждает подключение клиента, но сообщения не отправляются и вылезает такая ошибка:
File "", line 35, in send client.send(message) TypeError: a bytes-like object is required, not 'str'
import socket
import threading
server = socket.socket(
socket.AF_INET,
socket.SOCK_STREAM,
)
server.bind(
("127.0.0.1", 1234)
)
server.listen(5)
print("Server is listening")
users = []
def send_all(data):
for user in users:
user.send(data)
def listen_user(user):
print("Listening user")
while True:
data = user.recv(2048)
print(f"User sent {data}")
send_all(data)
def start_server():
while True:
user_socket, address = server.accept()
print(f"User <{address[0]}> connected!")
users.append(user_socket)
listen_accepted_user = threading.Thread(
target=listen_user,
args=(user_socket,)
)
listen_accepted_user.start()
Клиент:
import socket
from tkinter import *
from threading import Thread
#init Tkinter
root = Tk()
App = root
root.title("Client-chat")
root.configure(bg = "#DEE2E3")
App.geometry("400x450")
client = socket.socket(
socket.AF_INET,
socket.SOCK_STREAM,
)
client.connect(
("127.0.0.1", 1234)
)
#chat
def listen_server():
while True:
data = client.recv(2048)
print(data.decode("utf-8"))
def send():
listen_thread = Thread(target=listen_server)
listen_thread.start()
message = typeBox.get()
client.send(message)
data = client.recv(2048)
print(data)
while True:
client.send(input().encode("utf-8"))
#Input
typeBox = Entry(root, text = '');
send = Button(root, text = 'Send', bg = "#A0DEF2", font = ('times', 14, 'bold'), command = send)
typeBox.pack(side = BOTTOM, fill = X);
send.pack(side = BOTTOM, fill = X);
root.mainloop()
Ответы (1 шт):
Автор решения: Shamus Rezol
→ Ссылка
Ошибка сообщает, что метод отправки принимает закодированную строку. То есть вида b"Text". Если строка уже задана в переменную string, то используйте string.encode().