CUDP广播和组播编程实验报告_第1页
CUDP广播和组播编程实验报告_第2页
CUDP广播和组播编程实验报告_第3页
CUDP广播和组播编程实验报告_第4页
CUDP广播和组播编程实验报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、贵州大学实验报告 学院:计算机科学与技术 专业:软件工程 班级:软件132 姓名常伟学号1308060226实验地点一教802实验时间2016.5.8指导教师蔡丽实验成绩实验项目名称实验七C#UDP广播和组播编程实验目的通过本实验掌握C#中UDP编程的方法,了解其区别与适用场合。实验内容实现简单的基于UDP的多播和广播通信程序,要求使用C#的UDPClient类。实验原理 一、UDP特性。 (1) UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算

2、机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后

3、就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。实验步骤 一、设计程序界面1. 设计程序界面。在visual studio 2012环境下创建项目。设计其界面。其界面如下。 二、实现功能 在本地启动两个程序,在同一局域网的另外一台主机上再启动一个程序,其中本地的一个程序作为发送端,其余两个程序作为接收端,接收端的端口号都设为8001。 1.现在将接收端加入分组,开始接收,发送端发送信息给接收程序。本地的发送程序本地的接收程序非本地的接收程序 从上面的截图可知,两个接收程序都成功接收信息,且发现发送来的发送端的端口号却不同。 2.现在将接收端

4、加入不同的分组,并开始接收。非本地的接收程序本地的接收程序 现在开始向组“”发送信息。 接收情况如下。组“”的接收情况组“”的接收情况 3.在接收端处于不同分组的情况下,发送端采用“广播”发送。采用“广播”发送 接收情况如下。组“”接收到信息组“”接收到信息 由此可以看出广播和组播的区别。广播消息将同时向网上的一切进程转发,不论这个进程是独立进程还是某个组播组中的进程,都能畅通无阻地接收到广播消息。另外,仔细观察还能发现,无论是广播还是组播,消息都是匿名发送的。 实验数据 ;using System;us

5、ing System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Net;using System.Net.Sockets;using System.Threading;namespace UDP广播和组播 public partial class frmUd

6、pBroadcast : Form private UdpClient sendUdpClient; private UdpClient receiveUdpClient; IPEndPoint broadcastIPEndPoint; public frmUdpBroadcast() InitializeComponent(); IPAddress ips = Dns.GetHostAddresses(Dns.GetHostName(); tbxlocalip.Text = ips6.ToString(); int port = 8001; tbxlocalport.Text = port.

7、ToString(); tbxGroupIp.Text = ;/默认组 tbxSndtoGroupIp.Text = ; /设置加入组 private void chkbxJoinGroup_CheckedChanged(object sender, EventArgs e) if (chkbxJoinGroup.Checked = true) tbxGroupIp.Enabled = false; else tbxGroupIp.Enabled = true; tbxGroupIp.Focus(); /选择发送模式(广播或组播) private void

8、chkbxBroadcast_CheckedChanged(object sender, EventArgs e) if (chkbxBroadcast.Checked = true) tbxSndtoGroupIp.Enabled = false; else tbxSndtoGroupIp.Enabled = true; tbxGroupIp.Focus(); private void btnSend_Click(object sender, EventArgs e) if (tbxMsgtoSnd.Text = ) MessageBox.Show(请编辑待发信息的内容!, 提示); ret

9、urn; /根据不同模式发消息 if (chkbxBroadcast.Checked = true) /广播模式 broadcastIPEndPoint = new IPEndPoint(IPAddress.Broadcast, 8001); else /组播模式 broadcastIPEndPoint = new IPEndPoint(IPAddress.Parse(tbxSndtoGroupIp.Text), 8001); /启动发送线程 Thread threadSend = new Thread(SendMessage); threadSend.Name = 发送线程; threadS

10、end.Start(tbxMsgtoSnd.Text); private void SendMessage(object obj) string message = (string)obj; byte sendbytes = Encoding.Unicode.GetBytes(message); broadcastIPEndPoint = new IPEndPoint(IPAddress.Parse(tbxlocalip.Text), 8001); sendUdpClient = new UdpClient(); sendUdpClient.Send(sendbytes, sendbytes.

11、Length, broadcastIPEndPoint); sendUdpClient.Close(); /清空编辑框 ResetMsgTxt(tbxMsgtoSnd); private void btnReceive_Click(object sender, EventArgs e) chkbxJoinGroup.Enabled = false; /创建接收套接字 IPAddress localIp = IPAddress.Parse(tbxlocalip.Text); IPEndPoint localIPEndPoint = new IPEndPoint(localIp,int.Parse

12、(tbxlocalport.Text); receiveUdpClient = new UdpClient(localIPEndPoint); /加入组播组 if (chkbxJoinGroup.Checked = true) receiveUdpClient.JoinMulticastGroup(IPAddress.Parse(tbxGroupIp.Text); receiveUdpClient.Ttl = 50; /启动接收线程 Thread threadReceive = new Thread(ReceiveMessage); threadReceive.Name = 接收线程; thr

13、eadReceive.Start(); private void ReceiveMessage() IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, 0); while (true) try /关闭receiveUdpClient时此句会出现异常 byte receiveBytes = receiveUdpClient.Receive(ref remoteIPEndPoint); string message = Encoding.Unicode.GetString(receiveBytes, 0, receiveBytes

14、.Length); /显示消息内容 ShwMsgforView(lstbxMsgView, string.Format(0,1, remoteIPEndPoint, message); catch(Exception ex) Console.WriteLine(ex.ToString(); break; private void btnStop_Click(object sender, EventArgs e) chkbxJoinGroup.Enabled = true; receiveUdpClient.Close(); /用委托回调机制实现界面上消息内容显示和清空编辑框的操作 delega

15、te void ShwMsgforViewCallBack(ListBox listbox, string text); private void ShwMsgforView(ListBox listbox, string text) if (listbox.InvokeRequired) ShwMsgforViewCallBack shwMsgforViewCallBack = ShwMsgforView; listbox.Invoke(shwMsgforViewCallBack, new object listbox, text ); else listbox.Items.Add(text); listbox.SelectedIndex = listbox.Items.Count - 1; listbox.ClearSelected(); delegate void ResetMsgTxtCallBack(TextBox textbox); private void ResetMsgTxt(TextBox textbox) if (textbox.InvokeRequired) ResetMsgTxtCallBack resetMsgTxtCallBack = ResetMsgTxt; textbox.Invoke(resetMsgTxtCallBack,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论