1.Receiver

 public class Receiver
{
public delegate void HeartBeat(byte[] data);
public event HeartBeat Heart; #region 内部变量
private int size = ;
private UdpClient newsock;
private Thread t;
private int m_port;
private IPEndPoint sender;
#endregion /// <summary>
/// UDP开始接收指定端口数据
/// </summary>
/// <param name="port"></param>
public void Start(string port)
{
Int32.TryParse(port, out m_port); newsock = new UdpClient(m_port);
newsock.EnableBroadcast = true;
newsock.MulticastLoopback = true; sender = new IPEndPoint(IPAddress.Any, m_port);
t = new Thread(start);
t.IsBackground = true;
t.Start();
} public void Dispose()
{
if (newsock != null)
{
newsock.Close();
} if (t != null && t.ThreadState == ThreadState.Running)
{ t.Abort(); } } void start()
{
try
{
byte[] data; while (true)
{
if (newsock == null)
{
return;
}
if (newsock.Available <= )
{
continue;
}
if (newsock.Client == null)
{
return;
} data = newsock.Receive(ref sender); if (Heart != null)
{
Heart(data);
}
} }
catch (Exception e)
{ } } public void Join(string ip,string port)
{
Int32.TryParse(port, out m_port); newsock = new UdpClient(m_port);
newsock.EnableBroadcast = true;
newsock.MulticastLoopback = true; sender = new IPEndPoint(IPAddress.Any, m_port); if (newsock != null)
{
newsock.JoinMulticastGroup(IPAddress.Parse(ip));
} t = new Thread(start);
t.IsBackground = true;
t.Start();
} public void Leave(string ip)
{
if (newsock != null)
newsock.DropMulticastGroup(IPAddress.Parse(ip));
} }

2.UdpSender

  public class UdpSender
{
private UdpClient sendsock;
private int m_sendport;
private IPEndPoint m_SendPoint;
private static object _LockObj = new object(); /// <summary>
/// 单点UDP初始化
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
public void SetSend(string ip, string port)
{
Int32.TryParse(port, out m_sendport);
m_SendPoint = new IPEndPoint(IPAddress.Parse(ip), m_sendport); sendsock = new UdpClient
{
EnableBroadcast = true,
MulticastLoopback = true
};
} public void SendMsg(byte[] data)
{
lock (_LockObj)
{
if (sendsock != null)
{
sendsock.Send(data, data.Length, m_SendPoint);
}
} } public void Dispose()
{
if (sendsock != null)
{
sendsock.Close();
}
} /// <summary>
/// UDP组播初始化
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
public void Join(string ip, string port)
{
Int32.TryParse(port, out m_sendport);
sendsock = new UdpClient
{
EnableBroadcast = true,
MulticastLoopback = true
};
m_SendPoint = new IPEndPoint(IPAddress.Parse(ip), m_sendport);
sendsock.JoinMulticastGroup(IPAddress.Parse(ip));
} public void Leave(string ip)
{
if (sendsock != null)
sendsock.JoinMulticastGroup(IPAddress.Parse(ip));
} }

UDP及其组播,接收发送封装的更多相关文章

  1. ffmpeg笔记——UDP组播接收总结

    ffmpeg在avformat_open_input里面已经实现了UDP的协议,所以只需要设置好参数,将url传递进去就可以了. 和打开文件的方式基本一样: 01 AVCodecContext *pV ...

  2. 2019-10-30-C#-dotnet-core-局域网组播方法

    title author date CreateTime categories C# dotnet core 局域网组播方法 lindexi 2019-10-30 9:0:48 +0800 2019- ...

  3. Android上UDP组播无法接收数据的问题

    最近,想做一个跨平台的局域网的文件传输软件,思路是组播设备信息,TCP连接传输文件.于是进行了一次简单的UDP组播测试,发现Android对于UDP组播接收数据的支持即极为有限. 部分代码如下 pac ...

  4. 关于组播数据包“发不出去",c#无法接收

    问题一:发不出去 最近做一个小东西改进方案需要用到组播,简单来说就是我先作为服务器端组播发送设备编号,然后组播成员作为客户端接收消息后先确认对方是不是在呼叫我.是的话就返回一个消息,这样我服务器端就可 ...

  5. IP组播技术介绍及实现例子

    引 言 近年来,随着Internet的迅速普及和爆炸性发展,在Internet上产生了许多新的应用,其中不少是高带宽的多媒体应用,譬如网 络视频会议.网络音频/视频广播.AOD/VOD.股市行情发布. ...

  6. 《TCP/IP 详解 卷1:协议》第 9 章:广播和本地组播(IGMP 和 MLD)

    我已经懒了,卷一已经是去年年底看完的,但怎么说卷一的坑开了就要填完啊-- 广播和本地组播(IGMP 和 MLD) 引言 有 4 种 IP 地址,单播(unicast).任播(anycast).组播(m ...

  7. IPv4组播通信原理

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

  8. TCP/IP 笔记 - 广播和本地组播

    在之前第二章介绍IP寻址的时候有介绍到,IP地址有4种:单播.组播.广播.任播. 单播,客户端与服务器之间点到点连接通信: 组播,在发送者和多个接收者(如某个特定的分组)之间实现点对多点的连接通信: ...

  9. IP组播

    1  IP组播基础 IP组播技术有效地解决了单点发送.多点接收的问题.组播源只发送一份数据,被传递的信息在距组播源尽可能远的网络节点才开始被复制和分发,并且只发送给需要该信息的接收者.  说明: 本章 ...

随机推荐

  1. 一般处理程序中使用session

    首先引用:using System.Web.SessionState;  再在 IHttpHandler 后面加逗号加IReadOnlySessionState:IHttpHandler,IReadO ...

  2. eclipse查看class文件的源码

    eclipse查看class文件的源码: 1.网上下载jadClipse的jar包和执行文件jad.exe和 net.sf.jadclipse_3.3.0.jar. 2.把上面下载的jar包放在ecp ...

  3. mysql 常用查询

    1.unix时间戳的使用 unix_timesamp.from_unixtime 函数 和 datatime_format函数. // 从datetime 类型取做整形 unixtime时间戳; se ...

  4. iOS 沙盒(sandbox)结构 使用 实例

    声明:该文档是经过自己查找网上的资料以及自己多年的经验后而总结出来的,希望对大家有所帮助,有什么不恰当支出还请大家多指点! iOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为 ...

  5. C# 配置文件 AppSettings和ConnectionStrings的区别

      web.config是web应用程序的配置文件,为web应用程序提供相应配置(B/S).app.config是桌面应用程序的配置文件,为桌面应用程序提供相应配置(C/S).Configuratio ...

  6. Mapped Statements collection does not contain value fo

    Mapped Statements collection does not contain value for后面是什么类什么方法之类的: 错误原因有几种: 1.mapper.xml中没有加入name ...

  7. php中ajax调用出错的问题

    最近用一些php,客户的使用jquery ajax的时候经常报错 ajax报错内容:readyState:4 status:"OK",statusText:"OK&quo ...

  8. mysql存储过程 --游标的使用 取每行记录 (多字段)

    delimiter $ create PROCEDURE phoneDeal() BEGIN DECLARE id varchar(64); -- id DECLARE phone1 varchar( ...

  9. 记录一次自己对nginx+fastcgi(fpm)+mysql压力测试结果

    nginx + fastcgi(fpm) 压力测试: CentOS release 5.9 16核12G内存 静态页面: 并发1000,压测200秒,测试结果: 系统最大负载5.47 成功响应: 25 ...

  10. 巧妙地用二叉树完成算式计算算法<计算器,二叉树,C++,独辟蹊径>

    #01.引言,我们知道算式计算的问题是栈里面一个非常经典的题目.但是用栈来实现是一个非常麻烦的过程,第一要解决算式判断,是否为符合规则的算式,第二要由中最表达式转化为后缀表达式.这两个部分是栈实现计算 ...