UDP及其组播,接收发送封装

1.Receiver

  1 public class Receiver
  2     {
  3         public delegate void HeartBeat(byte[] data);
  4         public event HeartBeat Heart;
  5
  6         #region 内部变量
  7         private int size = 65535;
  8         private UdpClient newsock;
  9         private Thread t;
 10         private int m_port;
 11         private IPEndPoint sender;
 12         #endregion
 13
 14         /// <summary>
 15         /// UDP开始接收指定端口数据
 16         /// </summary>
 17         /// <param name="port"></param>
 18         public void Start(string port)
 19         {
 20             Int32.TryParse(port, out m_port);
 21
 22             newsock = new UdpClient(m_port);
 23             newsock.EnableBroadcast = true;
 24             newsock.MulticastLoopback = true;
 25
 26             sender = new IPEndPoint(IPAddress.Any, m_port);
 27             t = new Thread(start);
 28             t.IsBackground = true;
 29             t.Start();
 30         }
 31
 32
 33         public void Dispose()
 34         {
 35             if (newsock != null)
 36             {
 37                 newsock.Close();
 38             }
 39
 40             if (t != null && t.ThreadState == ThreadState.Running)
 41             { t.Abort(); }
 42
 43         }
 44
 45         void start()
 46         {
 47             try
 48             {
 49                 byte[] data;
 50
 51                 while (true)
 52                 {
 53                     if (newsock == null)
 54                     {
 55                         return;
 56                     }
 57                     if (newsock.Available <= 0)
 58                     {
 59                         continue;
 60                     }
 61                     if (newsock.Client == null)
 62                     {
 63                         return;
 64                     }
 65
 66                     data = newsock.Receive(ref sender);
 67
 68                     if (Heart != null)
 69                     {
 70                         Heart(data);
 71                     }
 72                 }
 73
 74             }
 75             catch (Exception e)
 76             {
 77
 78
 79             }
 80
 81
 82         }
 83
 84
 85         public void Join(string ip,string port)
 86         {
 87             Int32.TryParse(port, out m_port);
 88
 89             newsock = new UdpClient(m_port);
 90             newsock.EnableBroadcast = true;
 91             newsock.MulticastLoopback = true;
 92
 93             sender = new IPEndPoint(IPAddress.Any, m_port);
 94
 95             if (newsock != null)
 96             {
 97                 newsock.JoinMulticastGroup(IPAddress.Parse(ip));
 98             }
 99
100             t = new Thread(start);
101             t.IsBackground = true;
102             t.Start();
103         }
104
105         public void Leave(string ip)
106         {
107             if (newsock != null)
108                 newsock.DropMulticastGroup(IPAddress.Parse(ip));
109         }
110
111
112     }

2.UdpSender

 1  public class UdpSender
 2     {
 3         private UdpClient sendsock;
 4         private int m_sendport;
 5         private IPEndPoint m_SendPoint;
 6         private static object _LockObj = new object();
 7
 8
 9
10
11         /// <summary>
12         /// 单点UDP初始化
13         /// </summary>
14         /// <param name="ip"></param>
15         /// <param name="port"></param>
16         public void SetSend(string ip, string port)
17         {
18             Int32.TryParse(port, out m_sendport);
19             m_SendPoint = new IPEndPoint(IPAddress.Parse(ip), m_sendport);
20
21             sendsock = new UdpClient
22             {
23                 EnableBroadcast = true,
24                 MulticastLoopback = true
25             };
26         }
27
28         public void SendMsg(byte[] data)
29         {
30             lock (_LockObj)
31             {
32                 if (sendsock != null)
33                 {
34                     sendsock.Send(data, data.Length, m_SendPoint);
35                 }
36             }
37
38         }
39
40         public void Dispose()
41         {
42             if (sendsock != null)
43             {
44                 sendsock.Close();
45             }
46         }
47
48         /// <summary>
49         /// UDP组播初始化
50         /// </summary>
51         /// <param name="ip"></param>
52         /// <param name="port"></param>
53         public void Join(string ip, string port)
54         {
55             Int32.TryParse(port, out m_sendport);
56             sendsock = new UdpClient
57             {
58                 EnableBroadcast = true,
59                 MulticastLoopback = true
60             };
61             m_SendPoint = new IPEndPoint(IPAddress.Parse(ip), m_sendport);
62             sendsock.JoinMulticastGroup(IPAddress.Parse(ip));
63         }
64
65         public void Leave(string ip)
66         {
67             if (sendsock != null)
68                 sendsock.JoinMulticastGroup(IPAddress.Parse(ip));
69         }
70
71     }
时间: 2024-12-24 08:28:27

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

Android对UDP组播接收数据的有限支持(一)

最近,想做一个跨平台的局域网的文件传输软件,思路是组播设备信息,TCP连接传输文件.于是进行了一次简单的UDP组播测试,发现Android对于UDP组播接收数据的支持即极为有限. 部分代码如下 1 package com.hsocket.Udp; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 7 public class UdpReceiv

Java UDP 多用户 组播 聊天程序

一.实验环境 编程语言:Java1.8(运行在JVM(Java Virsual Machine)) 开发工具:eclipce 测试环境:局域网 二.实验目的 社会已经进入信息时代,网络技术在飞速发展.大量应用都依赖于从一个主机向多个主机或者从多个主机向多个主机发送同一信息的能力,在Internet上分布的数目可能达数十万台,这些都需要更高的带宽,并且大大超出了单播的能力.一种能最大限度地利用现有带宽的重要技术是IP组播. 三.组播聊天程序的实现: package cn.gdut.edu.udp;

jrtplib中组播代码发送端和接收端的实现

</pre>文章里面主要是把发送端课接收端代码的实现提了出来,和重要函数里的源码贴出来辅助学习,看到网上有人说好久做不出来,建议看看对应加入组播的源码,注意细节,话不多说,代码直接贴出来,各位朋友有意见多多交流.<p></p><p>发送端:</p><pre code_snippet_id="1677192" snippet_file_name="blog_20160510_2_5720022" nam

UDP 组播/多播实现步骤

UDP组播 实现服务器对客户端分组播放(发送数据). 实现步骤: server.c 1.创建服务器套接字 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol);   返回套接字 2.构建服务器地址结构 struct sockaddr_in serveraddr; #include <strings.h> bzero(&server

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

引 言 近年来,随着Internet的迅速普及和爆炸性发展,在Internet上产生了许多新的应用,其中不少是高带宽的多媒体应用,譬如网 络视频会议.网络音频/视频广播.AOD/VOD.股市行情发布.多媒体远程教育.CSCW协同计算.远程会诊.这就带来了带宽的急剧消耗和网络拥挤问 题.为了缓解网络瓶颈,人们提出各种方案,归纳起来,主要包括以下四种: ●增加互连带宽: ●服务器的分散与集群,以改变网络流量结构,减轻主干网的瓶颈: ●应用QoS机制,把带宽分配给一部分应用: ●采用IP Multic

CCNP路由实验之十 组播(多播)

??                    CCNP路由实验之十 组播(多播) 单播(Unicast):网络节点之间的通信通讯的模式是"一对一"的.此时信息的接收和传递仅仅在两个节点之间进行.比如.你在收发电子邮件.浏览网页时,必须与邮件server.Webserver建立连接,此时使用的就是单播传输数据方式.网络中的交换机和路由器对数据仅仅进行转发不进行复制. 假设10个客户机须要同样的数据,则server须要逐一传送.反复10次同样的工作. 但因为其能够针对每一个客户的及时响应.所

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

我已经懒了,卷一已经是去年年底看完的,但怎么说卷一的坑开了就要填完啊-- 广播和本地组播(IGMP 和 MLD) 引言 有 4 种 IP 地址,单播(unicast).任播(anycast).组播(multicast)和广播(broadcast).IPv4 可以使用所有地址,IPv6 可以使用除广播之外的地址. 本章讨论广播和组播的细节,例如: 链路层如何有效地从一台计算机向其他计算机发送广播或组播流量. 互联网组管理协议(IGMP)和组播侦听协议(MLD)如何工作,通知组播路由器子网中哪些组播

H3C组播系列之IP组播概述

一.组播的基本介绍 组播指发送源将产生的单一IP数据包通过网络发送给一组特定接收者的网络传输方式.组播结合了单播和广播的优点,在进行点到多点传输时,发送源不需要关心接受者的数目,仅需要发送一份报文:路由器仅关心接口下是否有接收者,同样不需要关心接收者的数量,所以在路由器之间的链路上也仅传送一份报告. 和单播相比,组播减轻了发送源的负担,并且提高了链路的有效利用率.此外,发送源可以同时发送报文给多个接收者,可以满足低延时应用的需求. 和广播相比,组播方式下路由器仅在有接收者的接口复制报文,报文最终

组播基础

组播基础 组播的优势:1.提高效率,降低网络流量,减轻硬件负荷:2.优化性能:减少冗余流量,节约网络带宽,降低网路负载:3.分布式应用,使多点应用成为可能. 组播的劣势:1. 基于UDP:2. 尽力而为:3. 没有拥塞避免机制:4. 报文重复:5. 报文失序. 组播服务模型:1. ASM(Any-Source Multicast)任意源组播:使用(*,G)表项,所以在网络中,一个组播地址只能用于同一个应用:一个组播组地址作为一个网络服务的集合,任何源发布到该组地址的数据得到同样的服务.2. SS