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组播技术有效地解决了单点发送.多点接收的问题.组播源只发送一份数据,被传递的信息在距组播源尽可能远的网络节点才开始被复制和分发,并且只发送给需要该信息的接收者. 说明: 本章 ...
随机推荐
- 初学c# -- 学习笔记(八)
RichTextBox我服了,背景透明.宽度高度自适应.图片背景透明.gif动画等等都tm实现困难无比,搞来搞去,就最后一题做不出来了: RichTextBox不管什么背景,透明背景也好,图片背景也罢 ...
- svn命令
1.检出.更新.提交 svn chectout http://svn_server/xxx_repository/trunk svn update svn commit -m "XXX&qu ...
- JSTL标准标签库 (使用foreach打印集合)
<%@page import="java.util.*"%><%@ page language= "java" contentType=&qu ...
- JSP(include指令与<jsp:include>动作的区别)
<%@ page language= "java" contentType="text/html;charset=UTF-8" %><html ...
- eclipse- Web-app verson=2.5 调整将Dynamic Web Module3.0降为2.5
如果提示cannot change version of project facet Dynamic Web Module to 2.5 1.把Dynamic Web Module复选框,勾选去掉,点 ...
- [问题]数据库MySQL和Navicat的乱码问题
计算机中存储字符需要使用编码集,早期有ASCII集,但是随着技术的发展,ASCII集不能满足需求,出现了越来越多的字符,比如中文字符等.后来又发展出了Unicode.GB2312.utf8等字符集.字 ...
- php 连接 mssql 常见的所有问题
php连接mssql时 ntwdblib.dllPHP连接MSSQL配置和PHP代码演示 收藏 如果实现了PHP和MySQL链接了,PHP和MSSQL的链接其实很简单: 支持MSSQL的本地链接和远程 ...
- javascript json转为 go struct 小工具代码
/** * Created by cdpmac on 15/10/20. */ var topname="Ap"; var jdata={ "item": { ...
- Shell基础-ech0,cat,history,alias,unalias,bash快捷键,wc,执行结果写入文件
1 系统所支持的shell存放于 /etc/shells 文件中,shell脚本的开头 #!/bing/bash 是指定使用的脚本类型 不能省略,省略之后有些文件可以执行,但容易出错 这行不是注释 2 ...
- Robot Framework入门学习2 创建第一个测试用例
本文章部分内容引自以下网址,感谢作者的辛苦分享 http://www.cnblogs.com/fnng/p/3871712.html http://blog.csdn.net/tulituqi/art ...