Я пытаюсь настроить приложение чата клиент-сервер. Мне сказали, что я могу сделать это с помощью потоков. Я знаю, что это теоретически, тогда кто-то еще сказал мне, что делать с asyn c, но я не знаю, что это такое. Я хочу отправлять / получать сообщения от клиента к серверу и наоборот, не дожидаясь ответа другого после отправки первого сообщения.
К сожалению, я не могу найти такую вещь. Самое близкое, что я обнаружил, было то, что клиент может отправлять несколько сообщений с автоответчиком с сервера.
И я не хочу, чтобы сервер отвечал автоматически, я хочу нормальное общение между сервером и клиентом без ожидания чтобы один ответил, а другой мог отправить второе сообщение.
Вот то, что я пробовал до сих пор.
Кстати, я знаю, что с несколькими клиентами что-то подобное возможно, но возможно ли это только в клиенте / сервере?)
Сервер:
from socket import *
from threading import *
hostSocket = socket(AF_INET, SOCK_STREAM)
hostSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR,1)
hostIp = "127.0.0.1"
portNumber = 7500
hostSocket.bind((hostIp, portNumber))
hostSocket.listen()
print ("Waiting for connection...")
clientSocket, clientAddress = hostSocket.accept()
print ("Connection established with: ", clientAddress[0])
# def snd():
serverMessage = input("Server says: ")
clientSocket.send(serverMessage.encode("utf-8"))
def rcv():
clientMessage = clientSocket.recv(2048)
print ("Client says: ", clientMessage.decode("utf-8"))
rcvthr = Thread(target=rcv)
rcvthr.start()
# sndthr = Thread(target=snd)
# sndthr.start()
# hostSocket.close()
клиент
from socket import *
from threading import *
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
hostIp = "127.0.0.1"
portNumber = 7500
clientSocket.connect((hostIp, portNumber))
# def snd():
clientMessage = input("Client says: ")
clientSocket.send(clientMessage.encode("utf-8"))
def rcv():
serverMessage = clientSocket.recv(2048)
print("Server says: ", serverMessage.decode("utf-8"))
# sndthr = Thread(target=snd)
# sndthr.start()
rcvthr=Thread(target=rcv)
rcvthr.start()
# clientSocket.close()