Help us understand the problem. What is going on with this article?

UWP で Socket.IO を利用してメッセージを受信する

More than 3 years have passed since last update.

Socket.IO を利用してデータを配信している機器などから、C# を利用して、値を受信するためには、SocketIoClientDotNet が便利です。サンプルを短くするためコードビハインドに書いていますが、実際は MVVM してください。

手順

1. UWP プロジェクトの作成と参照の追加

Windows > Universal > Blank App からプロジェクトを作成し、プロジェクトの 参照 > NuGet パッケージの管理 > 参照 で SocketIoClientDotNet を検索してインストールします。

2. UI の変更

MainPage.xaml を下記のように書き換えます。2行目の x:Class="App1.MainPage" は適宜作成したプロジェクト名に合わせて変更してください。

MainPage.xaml
<Page
    x:Class="App1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <TextBlock x:Name="ReceivedText" FontSize="30" >---</TextBlock>
    </Grid>
</Page>

ここでは、ReceivedText という名前の TextBlock を作成しました。

3. コードビハインドの更新

MainPage.xaml.cs を下記のように書き換えます。IPアドレス等は適宜書き換えてください。

MainPage.xaml.cs
using Quobject.SocketIoClientDotNet.Client;
using System;
using Windows.UI.Core;
using Windows.UI.Xaml.Controls;

namespace App1
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            SetSocket();
            ReceivedText.Text = "接続を待っています";
        }

        private void SetSocket()
        {
            var socket = IO.Socket("http://192.168.1.3:3000");

            // 接続時のイベント
            socket.On(Socket.EVENT_CONNECT, async () =>
            {
                // UIとは別スレッドなので Dispatcher を利用する
                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    ReceivedText.Text = "接続しました";
                });
            });

            // "msg" 受信時
            socket.On("msg", async (data) =>
            {
                // UIとは別スレッドなので Dispatcher を利用する
                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    ReceivedText.Text = Convert.ToString(data);
                });
            });
        }
    }
}

4. Package.appxmanifest の更新

プライベートネットワーク上でサーバとのやり取りが必要な場合は、Package.appxmanifest を開き、Private Networks (Client & Server) にチェックを入れます。このチェックをしないとプライベートネットワークではデータを送受信できません。

5. 接続の確認

ビルドを行いアプリケーションを実行します。あらかじめ Socket.IO のサーバを起動しておいてください。

nssol
お堅いと評判のユーザ系SIerです。※各記事の内容は個人の見解であり、所属する組織の公式見解ではありません。
https://www.nssol.nipponsteel.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away