Raspberry Pi 3 & Python 開発ブログ☆彡

Raspberry Pi 3の使い方、設定をわかりやすく解説。Raspberry Pi3 Model B(Element14版)、Raspbian 8.0(NOOBS Ver1.9.2)を使用して開発中。

【スポンサーリンク】

Socket通信の仕方(クライアント側)

【スポンサーリンク】

前回の続きでSocket通信の仕方を紹介します。クライアント側のコードは以下のようになります。

クライアント側のコード

・c_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)       

⇒ ソケットクラスをNewします。

・c_socket.connect( (host, port) )

⇒サーバーに接続します。下記のサンプルコードでは、サーバーに接続できない場合、3秒間隔で10回リトライするコードになっています。

あとは、send()、recv()メゾットでデータのやり取りをしています。

import socket
import time
import sys

HOSTNAME = "192.168.1.10"
PORT = 12345
INTERVAL = 3
RETRYTIMES = 10

def socket_connect(host, port, interval, retries):

    c_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)       

    for x in range(retries):
        try:
            c_socket.connect((host, port))
            return c_socket
        except socket.error:
            print "wait"+str(interval)+"s"
            time.sleep(interval)

    c_socket.close()
    return None

def main():

    c_socket = socket_connect(HOSTNAME,PORT,INTERVAL,RETRYTIMES)

    if c_socket is None:
        print "system exit:connection error"
        sys.exit(0)

    while(1):
        recvdata = c_socket.recv(1024)
        print "ReciveData:"+recvdata
        senddata = raw_input("SendData:")
        c_socket.send(senddata)
        if (recvdata == "quit") or (senddata == "quit"):
            c_socket.close()
            break
             
if __name__ == '__main__':
    main()


センサーで取得したデータをサーバーに送り(クライアント側)、サーバー側でWeb等を使って表示するという時等、いろいろな場面でSocket通信を使うことができます。send()、recv()のデータのやり取りの部分の自分のしたいことに合わせて書き換えて、使ってみてください。