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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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

解決済

2回答

1795閲覧

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

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のプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

1クリップ

投稿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 を実現しているように感じられております。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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

とあるので

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

ということなのでは?

投稿2022/04/16 11:42

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gelman

2022/04/17 02:22

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

0

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

投稿2022/04/16 08:15

編集2022/04/16 09:23
can110

総合スコア38262

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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については省いて質問に改め、引き続き回答を待ってみたいと考えております
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問