Многопоточный сервер сокетов в Python
Содержание
Поток представляет собой последовательность таких инструкций в рамках программы , которая может быть выполнена независимо от другого кода. Многопоточная программа содержит две или более части , которые могут работать одновременно. Каждая часть такой программы называется потоком, и каждый поток определяет отдельный путь выполнения. Многопоточное программирование сокетов описывает, что многопоточный сервер Socket может одновременно взаимодействовать с несколькими клиентами в одной и той же сети.
В предыдущем уроке Python Socket Programming описывает программу Socket Socket, которая может обмениваться данными только с одним клиентом одновременно. Это означает, что программа Socket Socket Python не принимает более одного клиентского соединения . Из следующего раздела вы можете понять, как на многопоточном сервере Python M можно одновременно общаться с несколькими Клиентами. Вы можете увидеть основы программирования Socket в предыдущем уроке, прежде чем вы начнете этот раздел взглянуть на Python Socket Programming
Программирование многопоточного сокета Python имеет два раздела:
- Программа Pilton Multi Threaded Server Socket (Server.py)
- Программа Python Client Socket (client.py)
Пример использования многопоточного сервера (Server.py)
import socket, threading class ClientThread(threading.Thread): def __init__(self,clientAddress,clientsocket): threading.Thread.__init__(self) self.csocket = clientsocket print ("New connection added: ", clientAddress) def run(self): print ("Connection from : ", clientAddress) #self.csocket.send(bytes("Hi, This is from Server..",'utf-8')) msg = '' while True: data = self.csocket.recv(2048) msg = data.decode() if msg=='bye': break print ("from client", msg) self.csocket.send(bytes(msg,'UTF-8')) print ("Client at ", clientAddress , " disconnected...") LOCALHOST = "127.0.0.1" PORT = 8080 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind((LOCALHOST, PORT)) print("Server started") print("Waiting for client request..") while True: server.listen(1) clientsock, clientAddress = server.accept() newthread = ClientThread(clientAddress, clientsock) newthread.start()
Пример клиента Socket Python (client.py)
import socket SERVER = "127.0.0.1" PORT = 8080 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((SERVER, PORT)) client.sendall(bytes("This is from Client",'UTF-8')) while True: in_data = client.recv(1024) print("From Server :" ,in_data.decode()) out_data = input() client.sendall(bytes(out_data,'UTF-8')) if out_data=='bye': break client.close()
Как запустить эту программу?
Создайте Python Multi Threaded Server Socket Program (Server.py) и Python Client Socket Program (client.py) в двух отдельных файлах. Откройте приглашение DOS (консоль) и сначала запустите серверную программу. Затем вы получите сообщение «Сервер запущен» на стороне сервера. Затем вы запускаете клиентскую программу в другом приглашении (консоли) DOS, после чего вы можете увидеть сообщение с сервера. Таким образом, вы можете одновременно запускать несколько клиентов из разных приглашений Dos и общаться с программой Server. Сервер принимает ваше сообщение и отвечает на одно и то же сообщение одному клиенту. Вы можете открыть много клиентской программы и протестировать ответ сервера каждому клиенту.
Источник: net-informations.com