Задание 2.2. Сокеты
Результаты выполнения представлены на рисунке 2:
Рисунок 2 – Результаты работы программы “server_socket.py” и “client_socket.py”
Текст программы “ server_socket.py ”
# import socket
# # Создаем сокет для сервера
# server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# server_socket.bind(("localhost", 12345)) # 127.0.0.1 = localhost
# server_socket.listen(1) # Ожидание только одного клиента
# print("Ожидание подключения клиента...")
# client_socket, addr = server_socket.accept()
# print("Клиент подключен от", addr)
# while True:
# data = client_socket.recv(1024) # Приём сообщения от клиента
# if not data:
# break
# message = data.decode('utf-8') # Декодинг строки из байтовой в текстовую
# print("Получено сообщение от клиента:", message)
# server_socket.close()
import socket
import multiprocessing
# Функция обработки входящих соединений
def handle_client(client_socket):
while True:
try:
data = client_socket.recv(1024)
if not data:
break
# Получение сообщения
message = data.decode('utf-8')
print("Получено сообщение от клиента:", message)
# Подтверждение получения клиента
confirmation_message = "Сообщение получено: " + message
client_socket.send(confirmation_message.encode('utf-8'))
except ConnectionResetError:
break
client_socket.close()
if __name__ == "__main__":
# Создаем сокет для сервера
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("localhost", 12345)) # 127.0.0.1 = localhost
server_socket.listen(2) # Ожидание двух клиентов
while True:
print("Ожидание подключений...")
client_socket, addr = server_socket.accept()
print("Клиент подключен от", addr)
# Создаем новый процесс для обработки клиента
client_process = multiprocessing.Process(target=handle_client, args=(client_socket,))
client_process.start()
Текст программы “ client_socket.py ”
# import socket
# # Создаем сокет для клиента
# client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# # Подключаемся к серверу
# client_socket.connect(("localhost", 12345)) # 127.0.0.1 = localhost
# while True:
# message = input("Введите сообщение: ")
# if message == 'exit':
# break
# client_socket.send(message.encode('utf-8'))
import socket
if __name__ == "__main__":
# Создаем сокет для клиента
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("localhost", 12345)) # 127.0.0.1 = localhost
while True:
message = input("Введите сообщение (или 'exit' для завершения): ")
if message == 'exit':
break
client_socket.send(message.encode('utf-8'))
# Подтверждение получения сообщения сервером
confirmation_message = client_socket.recv(1024)
response = confirmation_message.decode('utf-8')
print("От сервера получено уведомление:", response)