第3回:Pythonでネットワークプログラミング(TCPサーバーを立てる)
TCPを使った通信では、クライアントはコネクションの確立を行うことが重要でした。socketの作成は慣れです。これは、C言語と非常に似ています。Pythonでネットワークプログラミングを勉強しておけば、C言語で勉強するときにも役に立つはずです。そもそも、ネットワークプログラミングを勉強をする必要があるかどうかはここでは問いません!!!
TCPサーバーを立てる
まずはサーバー側のプログラムから
#! /usr/bin/env python # coding:utf-8 # tcp_server import socket import threading bind_ip = '0.0.0.0' bind_port = 9999 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #socket.AF_INETでip4を使うことを指定。socket.SOCK_STREAMでTCPを使うことを指定。 server.bind((bind_ip,bind_port)) #自分のIPアドレスとportを設定する。 #相手のIPアドレスとportを設定する場合は、connectを使うと考えてよい。 server.listen(5) #コネクションの最大保存数を設定する。 print '[*]Listening on %s:%d' % (bind_ip,bind_port) def handle_client(client_socket): bufsize=1024 request = client_socket.recv(bufsize) print '[*] Recived: %s' % request client_socket.send("Hallo Client!!!\n") client_socket.close() while True: client,addr = server.accept() #bind済みのソケットから、新たなソケットと接続先のアドレスを返す。 print '[*] Accepted connectoin from: %s:%d' % (addr[0],addr[1]) client_handler = threading.Thread(target=handle_client,args=(client,)) # threadingを使って、スレッドを生成する。マルチコアに対応させたい場合は,multiprocessingを使えば良い。 # targetは呼び出す関数(オブジェクト)を指定し、argsはその引数を指定している。 client_handler.start() # 処理を開始する。
クライアント側のプログラム。第1回のプログラムを書き換えてやれば、終了です。
#! /usr/bin/env python # coding:utf-8 # tcp_client import socket target_url='0.0.0.0' target_port=9999 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #socket.AF_INETでip4を使うことを指定。socket.SOCK_STREAMでTCPを使うことを指定。 s.connect((target_url,target_port)) #コネクションを確立する。 s.send('Hello Server!!!\n') response = s.recv(4096) print response
ターミナルを2つ開いて、実行してやれば、通信できます。