MENU

Pythonでソケット通信を使ってデータを転送する方法 | Linuxマシンのサーバ側プログラム実装

  • URLをコピーしました!

※本ページはアフィリエイト広告を利用しています

今日の記事では、Pythonを使用してソケット通信サーバーを構築する方法について詳しく解説します。

特に、Linux環境(今回は例としてRaspberry Pi OSを使用します)での実装に焦点を当てます。

ソケット通信は、ネットワークプログラミングの基本であり、この記事を通じてその基礎をしっかりと理解していただければと思います。

目次

ソケット通信とは

ソケット通信は、ネットワークを介してコンピュータ間でデータを送受信するための一般的な方法です。ソケットは、ネットワーク上の2つのエンドポイント間の通信リンクを抽象化したもので、通常はIPアドレスとポート番号の組み合わせで識別されます。

ソケット通信の一般的なフローは以下のようになります:

  1. ソケットの作成:ソケット通信を始めるには、まずソケットを作成する必要があります。ソケットは、特定の通信プロトコル(TCP、UDPなど)に基づいて作成されます。
  2. ソケットのバインド:サーバ側では、ソケットを特定のIPアドレスとポート番号にバインド(関連付け)します。これにより、そのソケットは指定したIPアドレスとポート番号で通信を待つようになります。
  3. 接続の待機と受け入れ:サーバ側のソケットは、クライアントからの接続を待つ状態になります。クライアントから接続要求があった場合、サーバはその接続を受け入れ、クライアントと通信するための新しいソケットを生成します。
  4. データの送受信:一旦接続が確立すると、クライアントとサーバはデータを送受信することができます。データはバイト列として送受信され、受信側では必要に応じて適切な形式(文字列、数値、構造体など)に変換します。
  5. ソケットのクローズ:通信が終了したら、ソケットは閉じられます。これにより、ソケット通信に使用されていたリソースが解放されます。

この基本的なフローは、ほとんどのソケット通信のシナリオに適用できます。しかし、実際のソケット通信では、非同期通信、エラーハンドリング、タイムアウトの設定など、より高度なテクニックが必要になる場合もあります。

接続先のクライアント

今回、接続先の通信相手となるは、WindowsPC上のPythonで記述されたクライアントプログラムです。

クライアント側のコードについては、以下の記事で解説しています。

ライブラリのインストール

Pythonのソケットプログラミングで使用する主なライブラリは標準ライブラリに含まれているsocketですので、特別にインストールする必要はありません。

作成したPythonコード

  1. ソケットオブジェクトの作成: socket モジュールをインポートし、socket.socket() 関数を用いてソケットオブジェクトを作成します。
  2. ホストとポートの設定: ローカルホスト(通常は “127.0.0.1”)と、クライアントと通信するためのポート番号(例:12345)を設定します。
  3. バインド: bind() メソッドを用いて、指定したホストとポート番号にソケットをバインドします。
  4. 接続の待機: listen() メソッドでクライアントからの接続を待ちます。この時点で、サーバーはクライアントからの接続を待機する状態になります。
  5. 接続の許可: accept() メソッドを用いて、クライアントからの接続を許可します。成功すると、クライアントのソケットオブジェクトとアドレス情報が返されます。
  6. データの受信: recv() メソッドを用いて、クライアントから送られてくるデータを受信します。
  7. 条件判定と応答: 受信したデータが “テストメッセージ” であるかどうかを確認し、該当する場合は応答メッセージを送信します。
  8. ソケットのクローズ: 通信が終了したら、close() メソッドを用いてソケットを閉じます。

作成した全体のソースコード

import socket

# ソケットオブジェクトの作成
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# ローカルホストとポート番号を指定
host = "127.0.0.1"
port = 12345

# バインド
server_socket.bind((host, port))

# 接続待機
server_socket.listen(1)
print("サーバーが起動し、クライアントの接続を待っています...")

# クライアントからの接続を許可
client_socket, address = server_socket.accept()
print(f"{address} から接続がありました。")

while True:
    # クライアントからのデータを受信
    data = client_socket.recv(1024).decode('utf-8')
    print(f"受信データ: {data}")

    # クライアントに応答メッセージを送信
    if data == "テストメッセージ":
        client_socket.send("メッセージを受信しました。".encode('utf-8'))
        print("応答メッセージを送信しました。")
        break

# ソケットを閉じる
client_socket.close()
server_socket.close()

組込みソフトウェアの知識を仕事に活かすには

趣味でマイコンのプログラムを書いてるから、仕事でも活かしたいなあ。
でも自信が無い…

そんな時は、一度スクールで体系的に基礎を学ぶといいよ。

趣味のプログラミングスキルを活かしたいけど、「実務レベルで通用するか不安」という方には、プログラミングスクールを受講してみるのがおすすめです。

プログラミングスクールのカリキュラムは、企業の研修などでも利用されており、実践的で即戦力となるスキルを習得することが可能です。

Winスクールでは、Web系や機械学習、データサイエンスなどに加え、プログラミングスクールでは珍しいハードウェアを扱うC言語組み込みシステムやハードウェアとクラウドを連携させたIoTシステムの講座が非常に充実しています。

授業内容も受講者に対して組み込み用マイコンボードRaspberry Piを用意し、実機を使いながら学べる本格的なカリキュラムが用意されています。

また、受講者のスケジュールやロケーションに応じて、対面授業オンライン授業を選択、もしくは組み合わせて受講できるため、プログラミング初心者の方でも安心です。

家電自動車業界などへの転職を目指したい方に非常におすすめです。

また近年、クラウドソーシングのプラットフォームにも、マイコンボードを使った組み込みソフトウェアの開発案件も多く募集されており、副業でマイコンのソフトウェア開発を行う方も増えています。

クラウドワークスなどで「Raspberry Pi」と検索すると、開発解説記事作成などの案件が出てくるよ。

スクールで基礎をしっかり押さえておけば、安心して案件に応募できるね。

 プログラミング言語Python, C, C#, Java, JavaScript(React.js), Ruby, PHP, 他
 授業形式対面&オンラインが選択可能
 学習期間90分×40回(60時間)(C言語&組込みシステム開発(マイコンボード)コースの例)
 費用353,100円~(C言語&組込みシステム開発(マイコンボード)コース例)
 補助金、給付金一部の講座が教育訓練給付制度対象
 転職支援個別の就職カウンセリング、無料の就職支援セミナー
 実績・信頼性年間17,000人以上の受講者、年間1,484社の企業研修実績

\ Winスクール公式サイトを見てみる! /

まとめ

この記事では、PythonとLinux(Raspberry Pi OS)を使用してソケット通信のサーバーを構築する基本的な手法について解説しました。

ソケットの作成からデータの受信、そして応答までの一連の流れを学びました。これを基に、さまざまなネットワークアプリケーションの開発が可能です。

次回はクライアント側の実装について解説しますので、お楽しみに。

著:国本大悟, 著:須藤秋良, 監修:株式会社フレアリンク
¥2,640 (2023/10/20 11:53時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング
著:山田 祥寛
¥1,650 (2023/10/20 11:54時点 | Amazon調べ)
\楽天ポイント5倍セール!/
楽天市場
\ポイント5%還元!/
Yahooショッピング
よかったらシェアしてね!
  • URLをコピーしました!
目次