Как я могу получать / отправлять несколько сообщений одновременно в python? (Python Многопоточность) - PullRequest
0 голосов
/ 09 апреля 2020

Я выполнил некоторые инструкции, чтобы создать приложение для чата в python с использованием сокета, и оно работает нормально. Однако из-за способа написания вы можете отправлять сообщения только тогда, когда сообщение было отправлено первым. По сути, вы не можете отправлять несколько сообщений одновременно. Тем не менее, я действительно хотел бы включить это. Человек, который сделал учебник, сказал, что это может быть достигнуто с помощью многопоточности, но не стал вдаваться в подробности. Может кто-нибудь объяснить, что они имеют в виду? Спасибо. Вот код стороны сервера:

import socket
import sys
import time

s = socket.socket()
host = socket.gethostname()
port = 8080
s.bind((host,port))
print("\n")
print(host)
print("\n")
name = input("Please enter your username: ")
s.listen(1)
print("\n")
print("Waiting for incoming connections")
print("\n")
conn, addr = s.accept()
print("Connected")

s_name = conn.recv(1024)
s_name = s_name.decode()
print("\n")
print(s_name, " has connected to the server")
print("\n")
conn.send(name.encode())

while 1:
    message = input(">> ")
    conn.send(message.encode())
    message = conn.recv(1024)
    message = message.decode()
    print(message)

И код стороны клиента:

import socket
import sys
import time

s = socket.socket()
print("\n")
host = input(str("Please enter host name: "))
print("\n")
name = input("Please enter your username: ")
port = 8080
print("\n")
print("Connecting to ", host, "at port", port)
print("\n")
s.connect((host,port))
print("Connected")

s.send(name.encode())
s_name = s.recv(1024)
s_name = s_name.decode()
print("\n")
print(s_name, " has joined the chat")

while 1:
    message = s.recv(1024)
    message = message.decode()
    print(message)
    message = input(">> ")
    s.send(message.encode())

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 09 апреля 2020

если я хорошо понял вашу проблему, базовое c решение состоит в том, что вам нужно создать некоторое время l oop, в котором вы принимаете соединения, а затем обрабатываете их в отдельном потоке функций (на стороне сервера):

while True:
    conn, addr = s.accept()
    threading.Thread(target=connectionhandler, args=(conn,)).start()

def connectionhandler(conn):
    #do things with the connection

дайте мне знать, если это возможное решение для вас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...