using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
 
namespace NBC.Test.ObjectModel
{
    /// <summary>
    /// 组播通信类
    /// </summary>
    public class SocketUDP
    {
        /// <summary>
        /// 组播模式发送信息
        /// </summary>
        /// <param name="obj"></param>
        public void SendMessage(object obj)
        {
            //定义消息格式
            //日期_/时间_/活动时长_/指标_/出课教师_/班级_/学科_/课题_/ClassID
            ActivityObject mess = ((OperateObject)obj).AcObject;//此代码是我自定义的消息对象,使用时可按照自己需求从新定义
            IPAddress GroupAddress = IPAddress.Parse("234.168.100.2"); //此IP值为固定区间 详情请查询msdn
            int GroupPort = 11000;
            UdpClient sender = new UdpClient();
            IPEndPoint groupEP = new IPEndPoint(GroupAddress, GroupPort);
            sender.EnableBroadcast = true;
            try
            {
                byte[] bytes = UTF8Encoding.UTF8.GetBytes(mess.Date + "_/" + mess.Time + "_/" + mess.ActivityLength + "_/" + mess.Index + "_/" + mess.Techer + "_/" + mess.Grade + "_/" + mess.Subject + "_/" + mess.Project + "_/" + mess.ClassID);
                sender.Send(bytes, bytes.Length, groupEP);
                //sender.Close();
            }
            catch
            {
 
            }
        }
        //创建一个UdpClient实例  
        private Socket udpReceive;  
        /// <summary>
        /// 接收组播信息
        /// </summary>
        private void ReceiveMessage()
        {
            try
            {
                string maddress = "234.168.100.2";
                int listenport = 11000;
                string localip = getIPAddress();
                IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(localip), listenport);
                udpReceive = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                EndPoint ep = (EndPoint)ipe;
                udpReceive.Bind(ipe);
                udpReceive.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse(maddress)));
                while (true)
                {
                    byte[] b = new byte[1024];
                    udpReceive.ReceiveFrom(b, ref ep);
                    string str = UTF8Encoding.UTF8.GetString(b);
                    string message = "来自" + ep.ToString() + "消息";
                    //DialogResult res = MessageBox.Show(str, message);
                   
                }
            }
            catch (Exception ex)
            {
               
            }
        }
        /// <summary>
        /// 获取本地IP
        /// </summary>
        /// <returns></returns>
        private string getIPAddress()
        {
            // 获得本机局域网IP地址  
            IPAddress[] AddressList = Dns.GetHostByName(Dns.GetHostName()).AddressList;
            if (AddressList.Length < 1)
            {
                return "";
            }
            return AddressList[0].ToString();
        }
    }
}

C#Soket组播的更多相关文章

  1. Linux IPC socket 广播,组播

    getsockopt()/setsockopt() //获得sockfd指向的socket的属性 int getsockopt(int sockfd, int level, int optname, ...

  2. IPv4组播通信原理

    2011-05-08 21:21:14 标签:组播 vin_do,vin_do学习笔记,笔记 休闲 职场 摘自网络,感谢原作者 摘要: 本文试图成为学习TCP/IP网络组播技术的入门材料.文中介绍了组 ...

  3. UDP及其组播,接收发送封装

    1.Receiver public class Receiver { public delegate void HeartBeat(byte[] data); public event HeartBe ...

  4. ffmpeg无法接收组播流问题处理

    问题:ffmpeg无法对IP组播进行处理,表现如下 [root@os01 /]# ffprobe udp://225.0.0.2:9000 ffprobe version Copyright (c) ...

  5. 组播(Multicast)传输

    组播(Multicast)传输: 在发送者和每一接收者之间实现点对多点网络连接. 如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包.它提高了数据传送效率.减少了骨干网络出现拥 ...

  6. dell n2000 组播抑制

    http://en.community.dell.com/support-forums/network-switches/f/866/t/19677497 http://en.community.de ...

  7. Ztack学习笔记(6)-广播组播点播

    Zigbee网络中进行数据通信主要有三种类型:单播.组播.广播.那这三种方式如何设置呢,在哪里设置呢, 一. 广播 当应用程序需要将数据包发送给网络的每一个设备时,使用这种模式.广播的短地址有三种 0 ...

  8. [转]IP_ADD_MEMBERSHIP : 组播错误 的解决方法:

    [转]IP_ADD_MEMBERSHIP : 组播错误 的解决方法: http://www.cnitblog.com/dvb-dvb/archive/2012/10/15/aa.html by def ...

  9. [转载] ACE 组播校验和出错问题解决

    源地址:http://yuanmuqiuyu2000.blog.sohu.com/140904942.html 使用ACE框架写了个组播简单的测试工具,但是测试过程中,总是发现udp校验和出错的信息. ...

随机推荐

  1. POJ2594Treasure Exploration(最小路径覆盖,相交)

    Treasure Exploration Have you ever read any book about treasure exploration? Have you ever see any f ...

  2. uva 11732 (trie树)

    题意:求N个字符串两两比较,共比较了多少次? #include<iostream> #include<cstring> #include<cstdio> using ...

  3. NOI热身赛A. 小w、小j和小z

    $n \leq 100000$个点在数轴上运动,给初始位置和速度.能删$k$个点,问最晚什么时候发生第一次碰撞. 这个贪心题有点惊.. 首先肯定二分答案,然后就是判断怎么删这$k$个点.我想可以把有冲 ...

  4. vue.js源码学习分享(七)

    var _Set; /* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) { // use ...

  5. Intent显示启动与隐式启动

    Android的Acitivity启动大致有两种方式:显式启动与隐式启动.下面分别介绍: 1.显示启动: 清单文件注册Activity <activity android:name=" ...

  6. Python struct 详解

    最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结. 了解c语言 ...

  7. 在AxureRP8中实现广告文字滚动效果

    本文是实现动态文字在一个区域中滚动的效果,大概实现过程如下: 先准备一个区域,然后让文字在该区域内水平移动,本文是实现了从右到左的轮询的效果,其他雷同. 在Axure中,这种移动的过程需要动态移动,利 ...

  8. react 生命周期详解

    state有时候很不听话,在某些时候,我不想他渲染,偏偏react非常智能的帮我们重复渲染. 比如最常见的就是传递的对象为空,组件依旧渲染了一次或者多次. 更多场景不举例了,对症下药. shouldC ...

  9. IDEA连接linux服务器

    idea连接linux(完成了xshell和xftp连接linux的功能,可以直接卸载这俩了..) File->settings->Deployment左侧加号添加 选择传输类型ftp或者 ...

  10. va_list 简介

    原文:http://blog.sina.com.cn/s/blog_590be5290100qhxr.html va_list是一个宏,由va_start和va_end界定. typedef char ...