0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ESP32でソケット通信をする(補足)

Last updated at Posted at 2023-01-11

はじめに

ESP32のソケット通信の実装で個人的に理解に苦しんだ部分があったので,補足説明を.参考記事の方と一緒に読んでください.
参考記事: ESP32でソケット通信をしてみる(Micropython)

ソケット通信,何するの?

ソケット通信の細かい仕組みの話は難しいので置いといて,どんなことをしているのかざっくりと説明します.
まず,クライアント側は以下のことを行います.

  • ソケット作成
  • bind
  • connect
  • send
  • recv
  • close

次に,サーバ側は以下のことを行います.
  • ソケット作成
  • bind
  • listen
  • accept
  • recv
  • send
  • close

たくさんあります.listen,accept,recv(receive)に至ってはどれも似たようなことしそうですしね.混乱します.

ソケット作成

s = socket.socket()

ソケットを新規作成します.

bind

s.bind((address, port))

ソケットにアドレスをバインド(紐付ける)します.
でもaddressが決まってない時もありますよね.
そんな時は

s.bind(("",port))

これでaddressを指定せずにbindすることもできます.
バインド済みのソケットを再バインドすることはできません.

listen

s.listen(n)

サーバが接続を受け付けられるようにします.
電話で例えると着信拒否していない状態,来ていいですよーって受け入れ状態にしておくことです.
引数のnは任意の整数で同時に受け付けられるデバイスの数を指定します.

accept

s.accept()

後述するconnect()と対(?)になるものです.
接続を受け入れます.
電話で例えると電話に応答する部分に当たります.着信拒否していたら電話に出ることはできませんから,listen()している必要があります.
また,ソケットにアドレスをbindしている必要があります.
戻り値はconn,addrで,それぞれ接続先とのソケット,アドレスを返します.

connect

s.connect(address)

引数のaddressで接続先を指定します.接続先がacceptしている必要があります.

recv

s.recv(bufsize)

データを受信します.
引数のbufsizeで一度に受け取るデータサイズを指定します.

send / sendall

s.send()
s.sendall()

ソケットにデータを送信します.

close

s.close()

ソケットの接続を切断します.

全体の流れ

全体の流れと対応は大体こんな感じです↓

socket.png

終わりに

他のサイトや公式ドキュメントで詳しく書かれすぎてわからない時はざっくり全体像を掴みながら勉強して行きましょう.
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?