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. matlab 中的删除文件

    Matlab中有两种删除文件的方式: 一种是删除文件     delete()函数      //可以使用help  delete命令查询delete()函数的使用方法 delete('p1.jpg' ...

  2. jsp生成war

    安装java 环境,进入jsp所在目录,使用如下命令可将当前目录中所有文件打成到xss.war包中,正常的war包中还包含另外两个文件meta-inf,web-inf,在生成的时候,需要把这两个文件加 ...

  3. 转 整理 Linux服务器部署系列之一—Apache篇2

    http://www.jb51.net/article/46148.htm 如何查看Apache的连接数和当前连接数 查看了连接数和当前的连接数 netstat -ant | grep $ip:80 ...

  4. 36深入理解C指针之---结构体的内存处理

    一.有关结构体的内存处理包括,结构体指针和结构体成员指针的内存分配.结构体成员的数据对齐.结构体的内存释放 1.定义:与自定义数据类型(结构体)有关的内存分配.大小和释放问题 2.特征: 1).用内存 ...

  5. 浅谈JS的arguments对象

    在JavaScript中,arguments属于当前对象的一个内置属性,arguments非常类似于Array对象,但是又不是实例的Array.比如: Array.prototype.testArg ...

  6. VS debug调试方法

    F5 开始调试,执行到断点 Shift + F5 停止调试 F9 在光标所在行添加断点 Shift + F9 QuickWatch Shift Ctrl F9 delete all 断点 F10 单步 ...

  7. POJ 3660 Cow Contest 传递闭包+Floyd

    原题链接:http://poj.org/problem?id=3660 Cow Contest Time Limit: 1000MS   Memory Limit: 65536K Total Subm ...

  8. Ubuntu 16.04下使用Wine安装正则表达式工具RegexBuddy 4

    说明: 1.使用的Wine版本是深度出品(Deepin),已经精简了很多没用的配置,使启动能非常快,占用资源小. 2.关于没有.wine文件夹的解决方法:在命令行上运行winecfg: 下载: (链接 ...

  9. Oracle SOA Suit Adapter

    SOA架构的一个核心的使命是整合企业现存的各式各样的计算资源,它不仅仅是代码层面的整合,更是硬件,计算能力,服务能力的整合.Oracle SOA Suite在这方面做得特别的贴切,它提供了一组Adap ...

  10. cocos2d-x step by step(3) Doub le Kill简单的一些小动画

    在触控厮混了两年多,不过达到了自己的初衷以及目的. 目前从事cocos2d的更改和调优移植工作. 1 简单的一个图片放大和缩小 auto sprite = Sprite::create("l ...