memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

C#のWinアプリからProcessingにUDP通信する(指導用)

3年生のあるチームの制作物で上記の機能が必要になりました。

これくらいは自分で調べて何とかして欲しいですが、期限が迫っているのでとりあえずヒントとして。

いずれもサンプルをほぼそのまま利用しています。

準備は、ProcessingにUDPライブラリを入れます。操作は「スケッチ」ー「ライブラリをインポート」で、以下の画面で UDPを入力してライブラリを選択してINSTALLボタンを押すだけです。

f:id:ke_takahashi:20161108202932p:plain

ProcessingのプログラムはこのUDPライブラリのサンプルをほぼそのまま利用しています。

一応、以下に示します。実行すると6000番ポートで待ち状態になります。

import hypermedia.net.*;

UDP udp;

void setup() {
  udp = new UDP( this, 6000 );
  udp.listen( true );
}

void draw() {;}

void receive( byte[] data, String ip, int port ) {
  String message = new String( data );
  println( "receive: \""+message+"\" from "+ip+" on port "+port );
}

次にVisual Studioでアプリを作成します。

以下のサイトで公開されているプログラムをそのまま利用できます。当然ですが、ポート番号はProcessingにあわせて6000番と変更します。

UDPによりデータの送受信を行う: .NET Tips: C#, VB.NET

using System;

public class UdpSender
{
    static void Main()
    {
        //データを送信するリモートホストとポート番号
        string remoteHost = "127.0.0.1";
        int remotePort = 6000;

        //UdpClientオブジェクトを作成する
        System.Net.Sockets.UdpClient udp =
            new System.Net.Sockets.UdpClient();

        for (; ; )
        {
            //送信するデータを作成する
            Console.WriteLine("送信する文字列を入力してください。");
            string sendMsg = Console.ReadLine();
            byte[] sendBytes = System.Text.Encoding.UTF8.GetBytes(sendMsg);

            //リモートホストを指定してデータを送信する
            udp.Send(sendBytes, sendBytes.Length, remoteHost, remotePort);

            //または、
            //udp = new UdpClient(remoteHost, remotePort);
            //として、
            //udp.Send(sendBytes, sendBytes.Length);

            //"exit"と入力されたら終了
            if (sendMsg.Equals("exit"))
            {
                break;
            }
        }

        //UdpClientを閉じる
        udp.Close();

        Console.WriteLine("終了しました。");
        Console.ReadLine();
    }
}

自分のプログラムに組み込む前に、まず、この2つのプログラムを動かして通信できることを確かめること。そして、各自の用途に合わせて改変すべきところを、この「動作した」プログラムを改変しながら試してみることです。いきなり自分のプログラムにもっていって動かすと、悪いのが組み込み方が悪いのか?このプログラムに追加した部分が悪いのかを切り分けることができません。

小さくて、確実に自信をもって動作する、プログラム部品を作ってから、それを本体プログラムに組み込む、これが着実にソフトウェアを作り上げるコツです。

ちなみに、動かした様子は以下の通りです。

youtu.be