質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

UDP

UDP(User Datagram Protocol)とは、トランスポート層のプロトコルであり、コネクション型のデータサービスです。IPネットワーク上の別のホストにコンピュータのアプリケーションがメッセージを送ることができ、転送チャンネルやデータ経路を設定する必要はありません。TCPに比べて高速であるが、信頼性が薄いという特徴があります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

Arduino WiFiClient (UDPパケット)を用いて(TCPで実現されている)HTTPのリクエストができる理由を知りたい

gelman
gelman

総合スコア2

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

UDP

UDP(User Datagram Protocol)とは、トランスポート層のプロトコルであり、コネクション型のデータサービスです。IPネットワーク上の別のホストにコンピュータのアプリケーションがメッセージを送ることができ、転送チャンネルやデータ経路を設定する必要はありません。TCPに比べて高速であるが、信頼性が薄いという特徴があります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

2回答

0グッド

1クリップ

988閲覧

投稿2022/04/16 07:34

編集2022/04/16 10:19

前提

Arduino WiFiClient を用いてHTTP getリクエストが実現できる理由を知りたいと考えております。

WiFi への接続、HTTP getリクエストには WiFi ライブラリ のサンプルコード WiFiWebClient を用いたいです。

上記サンプルコードでは WiFi.begin した後、以下の様にすることで、HTTP getリクエストを実装していました。

C++

1 if (client.connect(server, 80)) { 2 3 // Make a HTTP request: 4 client.println("GET /search?q=arduino HTTP/1.1"); 5 client.println("Host: www.google.com"); 6 client.println("Connection: close"); 7 client.println(); 8 }

発生している問題

WiFi ライブラリの ドキュメント を確認すると、「このライブラリを使用すると、サーバー、クライアントをインスタンス化し、WiFiを介してUDPパケットを送受信できます。」との記述がありました。

一方、HTTPはTCPで実現されている認識です。
なぜ、WiFiClient ライブラリが送信するUDPパケットを用いて、TCPで実現されているHTTP get リクエストが実現できているのか理解できておりません。

追記

can110様により、ESP32ライブラリ WiFiClient では、TCPを用いて通信しているとのご回答いただいております。

一方、WiFiWebClient のサンプルコードでは、UDPパケットを送受信できると記載しているWiFiライブラリを用いて、HTTP get を実現しているように感じられております。

上記疑問について、追加でご回答いただけますと幸いです。
以上よろしくお願いいたします。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

1

ベストアンサー

With this library you can instantiate Servers, Clients and send/receive UDP packets through WiFi.

とあるので

  • (tcp)サーバーになれる
  • (tcp)クライアントになれる
  • udpも送受信ができる

ということなのでは?

投稿2022/04/16 11:42

ozwk

総合スコア13053

gelman👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

gelman

2022/04/17 02:22

ご回答ありがとうございます。 ご指摘の通りである可能性が高い気がしてきました。 Serverクラス、Clientクラス、UDPクラスが用意されているので、、 Clientクラスの中身見ながら確認してみたいと思っております!

1

ArduinoおよびESP32には詳しくない(違いがよく分からない)のですが
参照しているドキュメントと実際に利用しているライブラリが違うのではないでしょうか。
利用しているライブラリはespressif/arduino-esp32だと思われます。
であればWiFiClient.cppを見る限りSOCK_STREAMなのでTCPを利用しています。
参考:ソケットタイプ

投稿2022/04/16 08:15

編集2022/04/16 09:23
can110

総合スコア36243

gelman👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

gelman

2022/04/16 09:15 編集

コメントありがとうございます。 ESP32には別のWiFiClientライブラリがあるのですね、、 can110さんがarduino-esp32のライブラリがTCPを利用していると判断されたのはなぜか 追加でお教えいただくことは可能でしょうか
can110

2022/04/16 09:21

回答に追記しました。
gelman

2022/04/16 10:05

ご回答ありがとうございます。 確かに、arduino-esp32のライブラリではTCPを利用しているように見えました。 しかし、一方でArduino+WiFiシールドの構成を用いて、 [WiFi ライブラリ サンプルコード](https://docs.arduino.cc/library-examples/wifi-library/WiFiWebClient) の方法でも HTTP get が実現できているように思える点が気になってしまっております。 ESP32については省いて質問に改め、引き続き回答を待ってみたいと考えております

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

UDP

UDP(User Datagram Protocol)とは、トランスポート層のプロトコルであり、コネクション型のデータサービスです。IPネットワーク上の別のホストにコンピュータのアプリケーションがメッセージを送ることができ、転送チャンネルやデータ経路を設定する必要はありません。TCPに比べて高速であるが、信頼性が薄いという特徴があります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。