Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 359

6

Для weekday() значение для понедельника равно 0, а для воскресенья — 6. Для

функции isoweekday() значение для понедельника равно 1, а для воскресенья — 7.

Поэтому искомый день — суббота.

9. Когда вам будет (или уже было) 10 000 дней от роду?

>>> from datetime import timedelta

>>> party_day = my_day + timedelta(days=10000)

>>> party_day

datetime.date(2009, 12, 30)

Если это был ваш день рождения, вы, возможно, пропустили еще один повод

повеселиться.

Глава 11. Конкуренция и сети

1. Используйте объект класса socket, чтобы реализовать службу, сообщающую

текущее время. Когда клиент отправляет на сервер строку 'time', верните теку-

щие дату и время как строку ISO.

Вот так можно написать сервер udp_time_server.py:

from datetime import datetime

import socket

address = ('localhost', 6789)

max_size = 4096

print('Starting the server at', datetime.now())

print('Waiting for a client to call.')

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

server.bind(address)

while True:

data, client_addr = server.recvfrom(max_size)

if data == b'time':

466

Приложение Д. Ответы к упражнениям

now = str(datetime.utcnow())

data = now.encode('utf-8')

server.sendto(data, client_addr)

print('Server sent', data)

server.close()

А так — клиент udp_time_client.py:

import socket

from datetime import datetime

from time import sleep

address = ('localhost', 6789)

max_size = 4096

print('Starting the client at', datetime.now())

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while True:

sleep(5)

client.sendto(b'time', address)

data, server_addr = client.recvfrom(max_size)

print('Client read', data)

client.close()

Я поместил вызов sleep(5) в верхней части цикла клиента, чтобы сделать обмен

данными менее быстрым. Запустите сервер в одном окне: