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. IntelliJ IDEA Community Edition 14.1.4下 javafx scenebuilder的使用

    官网对应的配置文档:https://www.jetbrains.com/idea/help/preparing-for-javafx-application-development.html Java ...

  2. Android图像处理之Bitmap类(zz)

    Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件.本文从应用的角度,着重介绍怎么用Bitmap来实现这些 ...

  3. UltraEdit常用配置&搭建Java/C开发环境

    一:个人使用UE期间总结了以下经常使用的配置 1.手动配置语法高亮 [高级]->[配置]->[编辑器显示]->[语法高亮]->[词语列表的完整路径]->[浏览]找到安装目 ...

  4. Summary: Final Keyword

    In this tutorial we will learn the usage of final keyword. final keyword can be used along with vari ...

  5. zoj The 12th Zhejiang Provincial Collegiate Programming Contest Capture the Flag

    http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5503 The 12th Zhejiang Provincial ...

  6. HDU 3681 Prison Break(BFS+二分+状态压缩DP)

    Problem Description Rompire is a robot kingdom and a lot of robots live there peacefully. But one da ...

  7. POJ 1286 Necklace of Beads(Polya原理)

    Description Beads of red, blue or green colors are connected together into a circular necklace of n ...

  8. 变形--矩阵 matrix()

    matrix() 是一个含六个值的(a,b,c,d,e,f)变换矩阵,用来指定一个2D变换,相当于直接应用一个[a b c d e f]变换矩阵.就是基于水平方向(X轴)和垂直方向(Y轴)重新定位元素 ...

  9. mac工具-解析json visualJSON和JSON Accelerator这两款工具

  10. 给uefi引导的方式安装archlinux

    基本就是照着官方的wiki来的,不过官方的wiki的内容太杂了,或许我们需要的是一个瀑布似的流程. 其实大体上与mbr引导的方式类似,只凭借回忆说一下有区别的地方,等下一次有机会的时候再验证一下. 换 ...