UDP及其组播,接收发送封装
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及其组播,接收发送封装的更多相关文章
- ffmpeg笔记——UDP组播接收总结
ffmpeg在avformat_open_input里面已经实现了UDP的协议,所以只需要设置好参数,将url传递进去就可以了. 和打开文件的方式基本一样: 01 AVCodecContext *pV ...
- 2019-10-30-C#-dotnet-core-局域网组播方法
title author date CreateTime categories C# dotnet core 局域网组播方法 lindexi 2019-10-30 9:0:48 +0800 2019- ...
- Android上UDP组播无法接收数据的问题
最近,想做一个跨平台的局域网的文件传输软件,思路是组播设备信息,TCP连接传输文件.于是进行了一次简单的UDP组播测试,发现Android对于UDP组播接收数据的支持即极为有限. 部分代码如下 pac ...
- 关于组播数据包“发不出去",c#无法接收
问题一:发不出去 最近做一个小东西改进方案需要用到组播,简单来说就是我先作为服务器端组播发送设备编号,然后组播成员作为客户端接收消息后先确认对方是不是在呼叫我.是的话就返回一个消息,这样我服务器端就可 ...
- IP组播技术介绍及实现例子
引 言 近年来,随着Internet的迅速普及和爆炸性发展,在Internet上产生了许多新的应用,其中不少是高带宽的多媒体应用,譬如网 络视频会议.网络音频/视频广播.AOD/VOD.股市行情发布. ...
- 《TCP/IP 详解 卷1:协议》第 9 章:广播和本地组播(IGMP 和 MLD)
我已经懒了,卷一已经是去年年底看完的,但怎么说卷一的坑开了就要填完啊-- 广播和本地组播(IGMP 和 MLD) 引言 有 4 种 IP 地址,单播(unicast).任播(anycast).组播(m ...
- IPv4组播通信原理
2011-05-08 21:21:14 标签:组播 vin_do,vin_do学习笔记,笔记 休闲 职场 摘自网络,感谢原作者 摘要: 本文试图成为学习TCP/IP网络组播技术的入门材料.文中介绍了组 ...
- TCP/IP 笔记 - 广播和本地组播
在之前第二章介绍IP寻址的时候有介绍到,IP地址有4种:单播.组播.广播.任播. 单播,客户端与服务器之间点到点连接通信: 组播,在发送者和多个接收者(如某个特定的分组)之间实现点对多点的连接通信: ...
- IP组播
1 IP组播基础 IP组播技术有效地解决了单点发送.多点接收的问题.组播源只发送一份数据,被传递的信息在距组播源尽可能远的网络节点才开始被复制和分发,并且只发送给需要该信息的接收者. 说明: 本章 ...
随机推荐
- JCCLIENT IP GET UDP
##通道##110.52.233.5:18427## ##通道##112.95.251.214:18427## ##通道##119.29.192.206:18427## ##通道##123.207.1 ...
- String类的构造方法详解
package StringDemo; //String类的构造方法详解 //方法一:String(); //方法二:String(byte[] bytes) //方法三:String (byte[] ...
- 在JSP中使用JavaBean
//创建一个PersonBean类 public class PersonBean { private String name; private int age; public Pe ...
- 让div固定在顶部不随滚动条滚动
让div固定在顶部不随滚动条滚动 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...
- C++函数重载和函数模板
1.函数重载 这是小菜鸟写的一个例子. 函数重载应该注意以下几点: 1.1重载函数有类似的功能: 1.2只能以参数的类型(形参个数和类型)来重载函数, int max(int a,int b);flo ...
- Windows 2012 R2图标以及字体颜色发生变化更改成默认设置
1. 在桌面按"Win+R",然后输出regedit.2. 定位到HKEY_CURRENT_USER\Control panel\Colors3. 对照下面提供给您的初始化颜色的注 ...
- ajaxSubmit
$('button').on('click', function() { $('form').on('submit', function() { var title = $('in ...
- linux下python调用c模块
在C调用Python模块时需要初始化Python解释器,导入模块等,但Python调用C模块却比较简单,下面还是以helloWorld.c 和 main.py 做一说明: (1)编写C代码,hel ...
- Jquery动态在td中添加checkbox
如图:想要在这个id为headId的<td>中,用jquery动态添加checkbox 代码如下 : data是我用ajax 从后台获取的数据,里面含有若干个user类,我想把所有的人名字 ...
- 【随笔】Linux服务器备份相关
服务器数据的安全性一直都是服务器日常管理的重中之重.Linux服务器虚拟化虽然以其高度可靠的作业系统而闻名,不过系统失效仍然可能发生.可能因为硬体故障,电源中断,或其他不可预料的问题.更常见的这 些问 ...