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

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

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

UDP

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

2回答

1525閲覧

UDPを使って画像をUnityで受信したい

masura

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

UDP

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

2クリップ

投稿2017/11/07 05:32

編集2017/11/07 05:37

###実現したいこと
UnityでUDPを使って画像受信するシステムを作りたいと思っています。
メッセージの受信はネット情報を参考にしてできるようになりましたが、画像受信の仕方がわかりません。
プログラミング初心者のため、全くどうしていいのかわからないため教えて頂きたいです。
よろしくお願い致します。

###メッセージを受信するプログラム

UDPClient.cs

1using UnityEngine; 2using System.Net.Sockets; 3using System.Text; 4 5public class UDPClient : MonoBehaviour 6{ 7 // broadcast address 8 public string host = "127.0.0.1"; 9 public int port = 50000; 10 private UdpClient client; 11 12 void Start () 13 { 14 client = new UdpClient(); 15 client.Connect(host, port); 16 } 17 18 void Update () 19 { 20 } 21 22 void OnApplicationQuit() 23 { 24 client.Close(); 25 } 26}
using UnityEngine; using System.Collections; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; public class UDPReceive : MonoBehaviour { //address information int LOCA_LPORT = 50000; static UdpClient udp; Thread thread; void Start () { udp = new UdpClient(LOCA_LPORT); thread = new Thread(new ThreadStart(ThreadMethod)); thread.Start(); } void Update () { } void OnApplicationQuit() { thread.Abort(); } private static void ThreadMethod() { while(true) { IPEndPoint remoteEP = null; byte[] data = udp.Receive(ref remoteEP); string text = Encoding.ASCII.GetString(data); Debug.Log(text); } } }

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

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

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

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

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

ockeghem

2017/11/07 06:07

回答されている方も記されていますか、UDPを使いたい理由はなんでしょうか?
masura

2017/11/07 06:50

ロボットにつけたカメラからリアルタイムで画像を受信したいという目的があり、遅延が少ない方が良いと思いUDPを選択しました。
ockeghem

2017/11/07 07:30 編集

他の回答者が書かれているように、UDPの方が遅延は少ない代わりに、パケットロスの再送や誤りの訂正などを自前で作り込むことになるので、「プログラミング初心者」という立場では手に負えないと思いますよ
TAKAYASU

2017/11/07 08:01 編集

つけているカメラはWebカメラでしょうか?
masura

2017/11/07 08:08

@ockeghemさん TCPの方が比較的作りやすいのでしょうか?まずTCPで試してみようと思います。
ockeghem

2017/11/07 08:11

TCPであれば再送や誤り訂正などはTCP側でやってくれるのでアプリケーション側で作り込む必要はありません。すなわち作りやすくなります。
masura

2017/11/07 08:18

@TAKAYASUさん Webカメラです。
guest

回答2

0

回答ではないのですが、

UDPは止した方がよい気がします。UDPですとパケットロスする可能性や送信した順番とは異なる順序で受信してしまう場合もあると思います。通常画像は一部でもデータがおかしくなると再現できなくなる特徴を持つ場合が多いでしょうから、UDPでの送受信には向かないと思います。画像ならTCPを用いた方がよいのではないでしょうか?

投稿2017/11/07 05:56

KSwordOfHaste

総合スコア18394

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

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

masura

2017/11/07 07:14

リアルタイムで画像を受信したいのでUDPを選択しました。TCPでは遅延があるのではと思いUDPを選択しましたが、どれくらい遅延があるのかわからないのでTCPでもやってみようと思います。
KSwordOfHaste

2017/11/07 14:19 編集

UDPによるリアルタイム性の意味は、「一部のデータが欠損してもそれが問題でなく、なるべく新しいデータだけを効率よく受信できればよい」という前提ありきだと思います。ゆえに一部の画像が受信できなくてもかまわないならUDPでもアリと思います。ただし、データが欠損していることは検出したいでしょうから最小限の制御情報は必要だと思います。 一方、欠損が許されないなら、順序制御・再送制御が必要となりもはやUDPを使う意味は薄くなると思います。そのようなことをUDPをわざわざ使ってアプリケーションでやるのはかなり面倒でしょうし、やるにしてもTCPがやっているよりうまくやるのはなかなか難しいのではないかと思います。
guest

0

1から100の番号の書いてある100個の野球ボールがあったとします。
UDPというプロトコルは、「100個のボールをできるだけ速く相手に届ける、しかし100個全部ちゃんと届くとも限らないし、届くボールの順番はどうなってるかわからない」というものです。
TCPというプロトコルは、「1から順にボールを投げて届ける。相手が受け取ったことを確認して次のボールを投げる」というものです。UDPは速い代わりにそういった正確性を犠牲にしています。KSwordOfHasteさんの回答のように、画像データという「ちゃんとした並びになってないと成り立たないもの」を送るのは向いていません。

投稿2017/11/07 06:02

masaya_ohashi

総合スコア9206

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

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

masura

2017/11/07 10:09

UDP/TCPの分かりやすい説明ありがとございます。まずはTCPでトライしてみて使えるかどうか試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問