VB.NETでSocket.IOを使ってソケット通信する方法


私の調べた限りでは、日本語、英語に関わらず、VB.NETでSocket.IOを使用した通信を行う方法の解説が見当たらなかったため、ここに記事として残します。

スポンサーリンク

Socket.IOとは

Socket.IOとは、Node.js用に作られた、WebSocketによるリアルタイム通信を行うためのライブラリです。これを使うことで、簡単にWEBチャットアプリなどを作成することができます。

WebSocketをVB.NETで使用する方法は他にもありますが、私のように、サーバー上で動いているNode.jsアプリとクライアントPC上で動いているVB.NETアプリの間でWebSocket通信を行う場合は、Socket.IOで統一すると扱いやすいのではないかと思います。

環境の準備

今回は

  • Microsoft Visual Studio Community 2015(以下VSと略します)
  • .NET Framework 4.5.2

を使用します。

  1. 初めに、VSで「Visual Basic Windows フォーム アプリケーション」のプロジェクトを作成します。
  2. プロジェクトを「すべて保存」します。これでプロジェクトがProjectフォルダに存在するようになります。
  3. ツール→NuGet パッケージ マネージャー→ソリューションの NuGet パッケージの管理
    を開きます。
  4. 「参照」を押し、検索窓に「socketio」と入力します。
  5. 「SocketIoClientDotNet」を押し、プロジェクトにチェックを入れて最新版をインストールします。
  6. ライセンスに同意するなどの操作を行うと、Socket.IOクライアントのインストール完了です。

プログラムの作成

フォームの作成はお好みですが、私の場合はButton1としてConnectボタンのみ設置しました。

以下のようなコードを書きます。

Imports Quobject.SocketIoClientDotNet.Client

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim socket = IO.Socket("https://WebSocket接続のためのURL")
        socket.On(Socket.EVENT_CONNECT, AddressOf Connect)
        socket.On("chat1", AddressOf Receive)
    End Sub

    Sub Connect()
        Console.WriteLine("Connected.")
    End Sub

    Sub Receive(text As String)
        Console.WriteLine(text)
    End Sub

End Class

ソケットを作成し、Connectされた時の処理、イベント"chat1"を受信したときの処理を設定する流れです。

ミソは、AddressOf によってメソッドを指定するという点です。(ちなみに、C#のサンプルコードは見たことがありますが、そこではラムダ式を使って処理していました。C#についてはこちらのサイトを参考にするといいかもしれません。)

実行

実行すると、

このように出力ウィンドウに出力されます。

スポンサーリンク

おまけ

テキストボックスなどに出力することも頑張れば可能です。
別スレッドからの操作になるため、Delegateを使用してTextBoxのTextを変更する必要があります。

Imports Quobject.SocketIoClientDotNet.Client

Public Class Form1

    Delegate Sub textd(text As String)

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim socket = IO.Socket("https://WebSocket接続のためのURL")
        socket.On(Socket.EVENT_CONNECT, AddressOf Connect)
        socket.On("chat1", AddressOf Receive)
    End Sub

    Sub Connect()
        Console.WriteLine("Connected.")
    End Sub

    Sub Receive(text As String)
        'Console.WriteLine(text)
        Invoke(New textd(AddressOf change), text)
    End Sub

    Sub change(text As String)
        TextBox1.Text = text
    End Sub

End Class

このようなコードになります。

ご覧いただきありがとうございました。

last

フォローする

    コメント

    1. Kory Alva より:

      first of all, thank you very much for your contribution, excuse me, I am using a language translation (Spanish to English), for many months I searched for the
      correct syntax to use node.js in a vb.net client, because as you mention in your article , all the examples are in C#, thank you very much once again,
      a friend says goodbye. “Kory Alva” from Mexico