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组播技术有效地解决了单点发送.多点接收的问题.组播源只发送一份数据,被传递的信息在距组播源尽可能远的网络节点才开始被复制和分发,并且只发送给需要该信息的接收者. 说明: 本章 ...
随机推荐
- nullcon HackIM 2016 -- Crypto Question 3
After entring the luxurious condomium,you get the feel that you are in home of a yester Star. the ex ...
- centos 安装 maven
1: 下载 maven 我采用的是 apache-maven-3.3.9-bin.tar.gz http://maven.apache.org/download.cgi 2: 解压 tar ...
- uvm - dut
module dut(clk, rst_n, rxd, rx_dv, txd, tx_en); input clk; input rst_n; :] rxd; input rx_dv; :] txd; ...
- Win10切换中英输入法问题
用此方法解决后的效果: Win10系统只剩下"美式键盘"和"搜狗拼音"两种输入法,且默认为美式键盘. 按Ctrl+Shift切换到搜狗拼音,输入完成后,再按Ct ...
- JS绑定JavaScript事件
//onblur="onblurs(this)" // function onblurs(e) { // alert(e.value); // }
- Splinter学习--初探1,模拟百度搜索
Splinter是以Selenium, PhantomJS 和 zope.testbrowser为基础构建的web自动化测试工具,基本原理同selenium 支持的浏览器包括:Chrome, Fire ...
- Linux下安装php加速软件Xcache
Nginx网站根目录:/usr/share/nginx/html 1.安装xcache cd /usr/local/src #进入软件包存放目录 wget http://xcache.lighttpd ...
- C# Winform学习---MDI窗体的设计,PictureBox控件(图片上一页下一页),Timer控件,MenuStrip控件
一.MDI窗体的设计 1.MDI简介 MDI(Multiple Document Interface)就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows 2.0下 ...
- 开发Protege插件时,出现打开Protege后并不显示插件的原因
最近跟着导师一起开发了一个Protege插件,在按照http://www.cnblogs.com/biaoyu/archive/2011/01/07/1929715.html中所述一步步进行到最后时, ...
- JS 获取浏览器和屏幕宽高信息
网页可见区域宽:document.body.clientWidth网页可见区域高:document.body.clientHeight网页可见区域宽:document.body.offsetWidth ...