python3: сообщения собираются один за другим в сокеты - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь написать код для чата между двумя системами, код работает нормально, но я не могу отправлять и получать сообщения одновременно, т. Е. Когда клиент или сервер находятся в режиме отправки, он не может получать сообщения и когда он получаетВ режиме он не может отправлять сообщения, и если я набираю два-три сообщения и нажимаю клавишу ввода один за другим, то другой компьютер получает сообщения одно за другим, когда дело доходит до режима приема

вот мой код

сервер

def reply(sc):
    data=sc.recv(1024)
    text=data.decode('utf-8')
    print(text)
def send(sc):

    i=input('enter message:').encode('utf-8')
    sc.send(i)
def server(hn,port):
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    s.bind((hn,port))
    s.listen(1)
    print('lisening at {}'.format(s.getsockname()))
    sc,socketname=s.accept()
    while True:
        try:
            threading.Thread(target=reply(sc)).start()
            threading.Thread(target=send(sc)).start()
        except KeyboardInterrupt:
            sc.close()

клиент

def client(host,port):
    sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sock.connect((host,port))
    print('client has been assigned address',sock.getsockname())
    print('welcome to chatting session')
    while True:
        try:
            threading.Thread(target=send(sock)).start()
            threading.Thread(target=reply(sock)).start()
        except KeyboardInterrupt:
            sock.close()

def reply(sock):
    reply=sock.recv(1024)
    if reply:
        print('message:',reply.decode())
    else:
        sys.exit()

def send(sc):
    m=input('enter message:').encode('utf-8')
    sc.sendall(m)

как мне заставить мой код работать одновременно при отправке и получении?

1 Ответ

0 голосов
/ 10 марта 2019

При вызове цели потока вы должны использовать это:

на сервере и клиенте: -

    threading.Thread(target=reply, args=(sc,)).start()
    threading.Thread(target=send, args=(sc,)).start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...