using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading; namespace UDP2
{
public partial class Form1 : Form
{
private UdpClient sendUdpClient;
private UdpClient receiveUpdCLient; public Form1()
{
InitializeComponent(); IPAddress[] ips = Dns.GetHostAddresses("");
textBox1.Text = ips[0].ToString();
int port = 5000;
textBox2.Text = port.ToString();
textBox4.Text = ips[0].ToString();
textBox3.Text = port.ToString(); } private void textBox4_TextChanged(object sender, EventArgs e)
{ } private void Form1_Load(object sender, EventArgs e)
{ } private void button4_Click(object sender, EventArgs e)
{
IPAddress localIp = IPAddress.Parse(textBox1.Text);
IPEndPoint localIpEndPoint = new IPEndPoint(localIp, int.Parse(textBox2.Text)); receiveUpdCLient = new UdpClient(localIpEndPoint);
Thread receiceThread = new Thread(ReceiveMessage);
receiceThread.Start();
}
//接受消息方法
private void ReceiveMessage()
{
IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);//获得连接到本机的远程机器的IPENDPOINT
while (true)
{
try
{
//关闭receiveUdpClient时此时会产生异常
byte[] receiceBytes = receiveUpdCLient.Receive(ref remoteIpEndPoint);
string message = Encoding.Unicode.GetString(receiceBytes); //显示消息内容
ShowMessageforView(listBox1, string.Format("{0}[{1}])", remoteIpEndPoint, message)); }
catch
{
break;
}
}
}
//利用委托回调机制实现界面上消息内容显示
delegate void ShowMessageforViewCallBack(ListBox listbox, string text);
private void ShowMessageforView(ListBox listbox, string text)
{
if (listbox.InvokeRequired)
{
ShowMessageforViewCallBack showMessageforViewCallback = ShowMessageforView;
listbox.Invoke(showMessageforViewCallback, new object[] { listbox, text }); }
else
{
listBox1.Items.Add(text);
listBox1.SelectedIndex = listBox1.Items.Count - 1;
listBox1.ClearSelected(); } } private void button1_Click(object sender, EventArgs e)
{
if (textBox5.Text == string.Empty)
{
MessageBox.Show("发送内容不能为空", "提示");
return;
} //选择发送模式
if (checkBox1.Checked == true)
{ //匿名模式(套接字绑定的端口由系统随机分配)
sendUdpClient = new UdpClient(0); }
else
{
//实名模式(套接字绑定到本地指定的端口)
IPAddress localIP = IPAddress.Parse(textBox1.Text);
IPEndPoint localIpEndPoint = new IPEndPoint(localIP, int.Parse(textBox2.Text));
sendUdpClient = new UdpClient(localIpEndPoint); }
Thread sendThread = new Thread(SendMessage);
sendThread.Start(textBox5.Text); }
//发送消息方法
public void SendMessage(object obj)
{
string message = (string)obj;
byte[] sendbytes = Encoding.Unicode.GetBytes(message);
IPAddress remoteIp = IPAddress.Parse(textBox4.Text);
IPEndPoint remoteIpEndPoint = new IPEndPoint(remoteIp, int.Parse(textBox3.Text)); //显示消息内容
sendUdpClient.Send(sendbytes, sendbytes.Length, remoteIpEndPoint);
sendUdpClient.Close();
ResetMessageText(textBox5); }
delegate void ResetMessageCallback(TextBox textbox);
private void ResetMessageText(TextBox textbox)
{
// Control.InvokeRequired属性代表
// 如果控件的处理与调用线程在不同线程上创建的,则为true,否则为false
if (textbox.InvokeRequired)
{
ResetMessageCallback resetMessagecallback = ResetMessageText;
textbox.Invoke(resetMessagecallback, new object[] { textbox });
}
else
{
textbox.Clear();
textbox.Focus();
}
}
private void button3_Click(object sender, EventArgs e)
{
receiveUpdCLient.Close();
} private void button2_Click(object sender, EventArgs e)
{
this.listBox1.Items.Clear();
} }
}

  

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading; namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} EndPoint ep;
Socket socke;
private void button1_Click(object sender, EventArgs e)
{
socke = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9095); //初始化
ep = (EndPoint)iep;
socke.Bind(iep); Thread re = new Thread(ReceiveMessage);
re.Start(socke);
}
private void ReceiveMessage(object o)
{
Socket socke = o as Socket;
string msg;
byte[] data = new byte[1024];
while (true)
{
try
{
// 关闭receiveUdpClient时此时会产生异常
int receiveBytes = socke.ReceiveFrom(data, ref ep); string message = Encoding.Unicode.GetString(data,0,receiveBytes); // 显示消息内容
ShowMessageforView(lstbxMessageView, string.Format("{0}[{1}]", ep, message)); }
catch
{
break;
}
}
}
//接受消息
delegate void ShowMessageforViewCallBack(ListBox listbox, string text);
private void ShowMessageforView(ListBox listbox, string text)
{
if (listbox.InvokeRequired)
{
ShowMessageforViewCallBack showMessageforViewCallback = ShowMessageforView;
listbox.Invoke(showMessageforViewCallback, new object[] { listbox, text });
}
else
{
lstbxMessageView.Items.Add(text);
for (int i = 0; i < lstbxMessageView.Items.Count; i++)
{
if (lstbxMessageView.Items[i].ToString().Contains("172.16.5.58"))
{
lstbxMessageView.Items.Clear();
}
}
lstbxMessageView.SelectedIndex = lstbxMessageView.Items.Count - 1;
lstbxMessageView.ClearSelected();
}
} private void button2_Click(object sender, EventArgs e)
{
Thread sendThread = new Thread(SendMessage);
sendThread.Start(textBox1.Text);
}
public void SendMessage(object obj)
{
string message = (string)obj;
Socket sockes = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep=new IPEndPoint(IPAddress.Parse("172.16.255.255"),9095);
sockes.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); //显示消息内容
byte[] sendbytes = Encoding.Unicode.GetBytes(message);
sockes.SendTo(sendbytes, iep);
sockes.Close(); }
}
}

  

c# UDP广播的更多相关文章

  1. 利用Docker技术实现UDP广播效果(网络编程python版)

    docker的安装见官方文档 我使用的系统为Ubuntu16.04 Ubuntu系统安装docker文档地址:https://docs.docker.com/engine/installation/l ...

  2. 给Hi3518e的Uboot添加UDP广播收发功能

    基于个人兴趣,决定实现一个和方案公司提供的uboot收发广播的功能.记录笔记如下. SDK版本:Hi3518E_V100R001C01SPC081 1. 由于我手头的板子的Phy是RMII模式,因此先 ...

  3. NetworkComms V3 之发送UDP广播消息

    NetworkComms网络通信框架序言 NetworkComms通信框架,是一款来自英国的c#语言编写的通信框架,历时6年研发,成熟稳定,性能可靠. NetworkComms v3目前只支持基本的U ...

  4. Android杂谈--HTC等手机接收不到UDP广播报文的解决方案

    最近遇到个问题,在android手机上发送UDP报文的时候,HTC等机型(测试用HTC new one)接收不到广播报文,而其他的samsung, huawei, xiaomi, nexus等等均没有 ...

  5. [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现

    转自:http://www.cnblogs.com/zhili/archive/2012/09/03/2666974.html 上次因为时间的关系,所以把上一个专题遗留下的一个问题在本专题中和大家分享 ...

  6. c# socket udp广播

    一.广播消息 由于Tcp是有连接的,所以不能用来发送广播消息.发送广播消息,必须用到Udp,Udp可以不用建立连接而发送消息.广播消息的目的IP地址是一种特殊IP地址,称为广播地址.广播地址由IP地址 ...

  7. 通过UDP广播实现Android局域网Peer Discovering

    本文是对个人笔记中内容的整理,部分代码及图片来自互联网,由于不好找到原始出处,所以未加注明. 如有痛感,联系删除. 本文将介绍以下知识点: TCP与UDP的区别: 单播.多播.广播: Java中实现U ...

  8. 【Netty】UDP广播事件

    一.前言 前面学习了WebSocket协议,并且通过示例讲解了WebSocket的具体使用,接着学习如何使用无连接的UDP来广播事件. 二.UDP广播事件 2.1 UDP基础 面向连接的TCP协议管理 ...

  9. UDP广播-缓冲区过小

    上次介绍到了关于客户端实时刷新摄像头所识别的图片的一些方法,采用了了UDP广播的技术做处理.理论上是没有问题的,将客户端运行在不同电脑上也能很好的看到效果,运行日志也没看出啥问题,结果今天翻看日志的时 ...

  10. UDP广播 与 TCP客户端 --服务端

    随着倒计时的响声,自觉无心工作,只想为祖国庆生. 最近有遇到过这样一个问题,将摄像头识别的行人,车辆实时显示在客户端中.有提供接口,会以Json的数据的形式将实时将识别的对象进行Post提交.所以我们 ...

随机推荐

  1. [转]EntityFramework走马观花之CRUD(中)

    学习Entity Framework技术期间查阅的优秀文章,出于以后方便查阅的缘故,转载至Blog,可查阅原文:http://blog.csdn.net/bitfan/article/details/ ...

  2. jdk安装与环境变量配置(一劳永逸)

    换了一个项目组做新的项目,新的机器,又得重新打环境,懒得去百度下,这里做个备份,下回直接看就行,如下 进行java开发,首先要安装jdk,安装了jdk后还要进行环境变量配置: 1.下载jdk(http ...

  3. CollectionView添加头尾部

    //上下拉头尾部 self.collectionView.footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self ref ...

  4. C++Primer 第十五章

    //1.面向对象程序设计的核心思想是数据抽象,继承,动态绑定. // 通过使用数据抽象,我们可以将类的接口和实现分离 // 使用继承,可以定义相似的类型并对其相似关系建模 // 使用动态绑定,可以在一 ...

  5. 常用SQL操作(MySQL或PostgreSQL)与相关数据库概念

    本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; ...

  6. JavaScript内的类型转换

    JavaScript内的类型转换 1.分为自动转换和强制转换,我们一般用强制转换.其他类型转换为整数是parseInt();其他类型转化为小数parseFloat(); 2.判断是不是一个合法数字   ...

  7. Good Bye 2013

    C:有点这种题的经验,先存起来相等的 D:赛后还搓了好久的代码,其实长度就100,枚举两边情况,其实A和C就涵盖了所有情况!所以到2就可以了,而且我弄出了有多少个后,和两边情况,也不知道能否或怎么凑成 ...

  8. csuoj 1111: 三家人

    acm.csu.edu.cn/OnlineJudge/problem.php?id=1111 1111: 三家人 Time Limit: 1 Sec  Memory Limit: 128 MBSubm ...

  9. 输入和输出的总结(c语言)

    c语言中有多种的输入和输出方式,下面就简单总结一下: 一.输入的三种方式 (1)scanf scanf 函数可以在变量中使用,也可以在数组中使用,当然指针上也能用到,是一个很好的输入函数.scanf是 ...

  10. javaapi中的排序

    有的时候需要对数组里的element进行排序.当然可以自己编写合适的排序方法,但既然java包里有自带的Arrays.sort排序方法,在 数组元素比较少的时候为何不用? Sorting an Arr ...