У меня есть код который должен отправлять сообщения от клиента серверу и от сервера клиенту. Но при отправлении второго сообщения и сервер и клиент не отвечают.
Как сделать так чтобы сервер и клиент работали одновременно?
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.anchorlayout import AnchorLayout
import socket
from threading import Thread
import time
def server(message):
TCPServerSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
TCPServerSocket.bind(('', 9090))
TCPServerSocket.listen(1)
while True:
conn, addr = TCPServerSocket.accept()
while True:
data = conn.recv(1024)
if not data:
break
conn.send(message.encode('utf-8'))
TCPServerSocket.close()
def client(message):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 9090))
sock.send(message.encode('utf-8'))
while True:
data = sock.recv(1024)
print(bytes(data).decode("utf-8"))
def messageShow(message, host):
if message != "":
if host == "Хост":
server(message)
if host == "клиент":
client(message)
class ChatApp(App):
message = "Connect"
host = input("Хост или клиент")
if host == "Хост":
thread1 = Thread(target=server, args=message)
thread2 = Thread(target=client, args=message)
def build(self):
txt_input = TextInput()
an1 = AnchorLayout(anchor_x='left', anchor_y="bottom")
container_body = BoxLayout()
container_body.add_widget(TextInput(readonly=True))
container_input = BoxLayout(orientation='horizontal', size_hint=[1, .1])
container_input.add_widget(txt_input)
btn_input = Button(text="Отправить", size_hint=[.5, 1])
btn_input.bind(on_press=lambda *a: messageShow(txt_input.text, host))
container_input.add_widget(btn_input)
an1.add_widget(container_body)
an1.add_widget(container_input)
return an1
if __name__ == "__main__":
host = input("Хост или клиент")
ChatApp().run()