Связь клиент-сервер одновременно, без ожидания - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь настроить приложение чата клиент-сервер. Мне сказали, что я могу сделать это с помощью потоков. Я знаю, что это теоретически, тогда кто-то еще сказал мне, что делать с 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...