2018年6月5日火曜日

開発環境

入門 Python 3 (Bill Lubanovic (著)、斎藤 康毅 (監修)、長尾 高弘 (翻訳)、オライリージャパン)の11章(並行処理とネットワーク)、11.3(復習問題)1.を取り組んでみる。

コード(Emacs)

Python 3

server1.py

#!/usr/bin/env python3
import socket
import datetime

f = open('server1.txt', 'w')

print('11-1', file=f)
server_address = ('localhost', 6789)
max_size = 4096
print('待機中…', file=f)
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(server_address)
while True:
    data, client = server.recvfrom(max_size)
    print(data.decode('utf-8'), client, file=f)
    if data == b'time':
        server.sendto(datetime.datetime.now(
        ).isoformat().encode('utf-8'), client)
    else:
        server.sendto(b'xxxxx', client)

server.close()
f.close()

client1.py

#!/usr/bin/env python3
import datetime
import socket
import time

print('11-1')

server_address = ('localhost', 6789)
max_size = 4096
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

for i in range(10):
    if i % 2 == 0:
        client.sendto(b'time', server_address)
    else:
        client.sendto(b'TIME', server_address)
    data, server = client.recvfrom(max_size)
    print(data.decode('utf-8'))
    time.sleep(5)

client.close()

入出力結果(Terminal, Jupyter(IPython))

$ ./server1.py &
[1] 56640
$ ./client1.py
11-1
2018-06-05T18:37:11.299785
xxxxx
2018-06-05T18:37:21.306461
xxxxx
2018-06-05T18:37:31.314266
xxxxx
2018-06-05T18:37:41.320445
xxxxx
2018-06-05T18:37:51.326622
xxxxx
$ fg
./server1.py
  C-c C-cTraceback (most recent call last):
  File "./server1.py", line 14, in <module>
    data, client = server.recvfrom(max_size)
KeyboardInterrupt
$ cat server1.txt 
11-1
待機中…
time ('127.0.0.1', 61941)
TIME ('127.0.0.1', 61941)
time ('127.0.0.1', 61941)
TIME ('127.0.0.1', 61941)
time ('127.0.0.1', 61941)
TIME ('127.0.0.1', 61941)
time ('127.0.0.1', 61941)
TIME ('127.0.0.1', 61941)
time ('127.0.0.1', 61941)
TIME ('127.0.0.1', 61941)
$ 

0 コメント:

コメントを投稿