完善主體資料,免費贈送VIP會員!
    * 主體類型
    * 企業名稱
    * 信用代碼
    * 所在行業
    * 企業規模
    * 所在職位
    * 姓名
    * 所在行業
    * 學歷
    * 工作性質
    請先選擇行業
    您還可以選擇以下福利:
    行業福利,領完即止!

    下載app免費領取會員

    NULL

    ad.jpg

    二次開發教程:C# udp小程序

    發布于:2019-07-25 15:22:07

    網友投稿

    更多

    學習udp,寫個小聊天程序,供以后查看


    使用了MVVMLight


        /// <summary>

        /// This class contains properties that the main View can data bind to.

        /// <para>

        /// See http://www.mvvmlight.net

        /// </para>

        /// </summary>

        public class MainViewModel : ViewModelBase

        {

            private int port1 = 8981;

            private int port2 = 8982;

            private UdpClient user1 = null;//new UdpClient(8981);

            private UdpClient user2 = null;//new UdpClient(port2);

            private string hostname = "127.0.0.1";

            private readonly IDataService _dataService;

            /// <summary>

            /// The <see cref="WelcomeTitle" /> property's name.

            /// </summary>

            public const string WelcomeTitlePropertyName = "WelcomeTitle";

            private string _welcomeTitle = string.Empty;

            /// <summary>

            /// Gets the WelcomeTitle property.

            /// Changes to that property's value raise the PropertyChanged event. 

            /// </summary>

            public string WelcomeTitle

            {

                get

                {

                    return _welcomeTitle;

                }

                set

                {

                    Set(ref _welcomeTitle, value);

                }

            }


            /// <summary>

            /// Initializes a new instance of the MainViewModel class.

            /// </summary>

            public MainViewModel(IDataService dataService)

            {

                _dataService = dataService;

                _dataService.GetData(

                    (item, error) =>

                    {

                        if (error != null)

                        {

                            // Report error here

                            return;

                        }


                        WelcomeTitle = item.Title;

                    });


                user1 = new UdpClient(port1);

                user2 = new UdpClient(port2);


                Task task1 = new Task(() =>

                {

                    while (true)

                    {

                        IPEndPoint remoteEP = null;

                        byte[] message = user1.Receive(ref remoteEP);

                        string msg = Encoding.UTF8.GetString(message);

                        msg = chatInfo + "\n" + msg;

                        Set(ref chatInfo, msg,false,nameof(ChatInfo));

                    }

                });

                task1.Start();


                Task task2 = new Task(() =>

                {

                    while (true)

                    {

                        IPEndPoint remoteEP = null;

                        byte[] message = user2.Receive(ref remoteEP);

                        string msg = Encoding.UTF8.GetString(message);

                        msg = chatInfo + "\n" + msg;

                        Set(ref chatInfo, msg, false, nameof(ChatInfo));

                    }

                });

                task2.Start();

            }



            private string chatInfo = string.Empty;

            public string ChatInfo

            {

                get

                {

                    return chatInfo;

                }

                set

                {

                    chatInfo = value;

                }

            }


            private string message1 = string.Empty;

            public string Message1

            {

                get

                {

                    return message1;

                }

                set

                {

                    // message1 = value;     

                    Set(ref message1, value);

                    RaisePropertyChanged(nameof(User1_Send));     

                }

            }


            private string message2 = string.Empty;

            public string Message2

            {

                get

                {

                    return message2;

                }

                set

                {

                    //message2 = value;

                    Set(ref message2, value);

                    RaisePropertyChanged(nameof(User2_Send));

                }

            }


            public ICommand User1_Send

            {

                get

                {

                    return new RelayCommand(() =>

                    {

                        message1 = "user1:" + message1;

                        byte[] msg = Encoding.UTF8.GetBytes(message1);

                        IPAddress id = IPAddress.Parse(hostname);

                        IPEndPoint ip = new IPEndPoint(id, port2);

                        user1.Send(msg, msg.Length, ip);

                        Set(ref message1, null,false,nameof(Message1));

                        RaisePropertyChanged(nameof(User1_Send));

                    }, ()=> {

                        return !string.IsNullOrWhiteSpace(message1);

                    });

                }

            }


            public ICommand User2_Send

            {

                get

                {

                    return new RelayCommand(() =>

                    {

                        message2 = "user2:" + message2;

                        byte[] msg = Encoding.UTF8.GetBytes(message2);

                        IPAddress id = IPAddress.Parse(hostname);

                        IPEndPoint ip = new IPEndPoint(id, port1);

                        user2.Send(msg, msg.Length, ip);

                        Set(ref message2, null, false, nameof(Message2));

                        RaisePropertyChanged(nameof(User2_Send));

                    }, () => {

                        return !string.IsNullOrWhiteSpace(message2);

                    });

                }

            }

            public override void Cleanup()

            {

                // Clean up if needed

                user1.Close();

                user2.Close();

                base.Cleanup();

            }

        }




    xmal:


    <Window x:Class="ChatDemo.MainWindow"

            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

            xmlns:ignore="http://www.galasoft.ch/ignore"

            mc:Ignorable="d ignore"

            SizeToContent="WidthAndHeight"

            Title="MVVM Light Application"

            DataContext="{Binding Main, Source={StaticResource Locator}}">

        

        <Window.Resources>

            <ResourceDictionary>

                <ResourceDictionary.MergedDictionaries>

                    <ResourceDictionary Source="Skins/MainSkin.xaml" />

                </ResourceDictionary.MergedDictionaries>

            </ResourceDictionary>

        </Window.Resources>



        <Grid x:Name="LayoutRoot">

            <Grid.ColumnDefinitions>

                <ColumnDefinition/>

                <ColumnDefinition/>

            </Grid.ColumnDefinitions>

            <Grid.RowDefinitions>

                <RowDefinition/>

                <RowDefinition/>

                <RowDefinition/>

            </Grid.RowDefinitions>

            <TextBox  Text="{Binding Path=ChatInfo,UpdateSourceTrigger=PropertyChanged}" Grid.Row="0" Grid.Column="0" IsReadOnly="True"/>

            <TextBox  Text="{Binding Path=Message1,UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" Grid.Column="0" Height="100"/>

            <Button  Content="發送" Command="{Binding Path=User1_Send}" Grid.Row="2" Grid.Column="0"/>

            <TextBox   Text="{Binding Path=ChatInfo,UpdateSourceTrigger=PropertyChanged}" Grid.Row="0" Grid.Column="1" IsReadOnly="True"/>

            <TextBox   Text="{Binding Path=Message2,UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" Grid.Column="1" Height="100"/>

            <Button Content="發送" Command="{Binding Path=User2_Send}" Grid.Row="2" Grid.Column="1"/>

        </Grid>

    </Window>

    本文版權歸腿腿教學網及原創作者所有,未經授權,謝絕轉載。

    未標題-1.jpg

    上一篇:二次開發教程:C# 通過MVVMLight探索IOC

    下一篇:二次開發教程:WPF 設置快捷鍵

    主站蜘蛛池模板: 国产一区二区在线看| 精品视频一区二区三区免费| 日韩精品一区二区三区影院| 久久精品国产第一区二区三区 | 国产丝袜美女一区二区三区| 亚洲av无码成人影院一区| 高清一区二区三区日本久| 中文字幕在线播放一区| 一区二区三区在线视频播放| 精品久久久久久中文字幕一区| 亚洲一区二区三区首页| 一区二区三区人妻无码| 国产亚洲欧洲Aⅴ综合一区| 色一情一乱一伦一区二区三区| 亚洲A∨精品一区二区三区下载| 99精品一区二区三区无码吞精| 亚洲av午夜福利精品一区| 国产AV午夜精品一区二区三| 日本高清成本人视频一区| 精品国产不卡一区二区三区| 日本视频一区二区三区| 一区免费在线观看| 精品视频一区二区三区| 国产成人片视频一区二区| 国产高清在线精品一区二区三区| 精品一区二区三区无码免费直播| 国产人妖在线观看一区二区| 国产成人av一区二区三区在线观看| 夜精品a一区二区三区| 精品国产亚洲第一区二区三区| 日韩一区二区在线免费观看| 无码人妻一区二区三区在线水卜樱| 一区在线观看视频| 亲子乱av一区二区三区| 日本一区二区在线| 精品国产一区AV天美传媒| 亚洲av色香蕉一区二区三区蜜桃| 亚洲av成人一区二区三区观看在线| 韩国精品一区二区三区无码视频| 国产伦精品一区三区视频| 中文字幕人妻无码一区二区三区|