おいも貴婦人ブログ

生物系博士課程満期退学をしたAIエンジニアのブログ。

第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つ開いて、実行してやれば、通信できます。