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. Hadoop2.2.0 第一步完成MapReduce wordcount计算文本数量

    1.完成Hadoop2.2.0单机版环境搭建之后需要利用一个例子程序来检验hadoop2 的mapreduce的功能 //启动hdfs和yarn sbin/start-dfs.sh sbin/star ...

  2. PostgreSQL Replication之第十一章 使用Skytools(4)

    11.4 使用 londiste 复制数据 pgq是一个叫做londiste的复制工具的核心.londiste 的核心是有一个比如比Slony 更加简单,容易使用的机制.如果您在一个大的安装中使用Sl ...

  3. 轉發和重定向-JSP

    最近在復習JSP,寫案例時遇到轉發和重定向的問題,忽然忘記了好多東西.趕緊搜索了下,感覺還是比較常用的. 轉:http://blog.csdn.net/CYHJRX/article/details/3 ...

  4. 2-sat(石头、剪刀、布)hdu4115

    Eliminate the Conflict Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  5. iis access denied, you do not have permission.

    this kind of problems are usually caused by some IIS configuration issues, like application pool set ...

  6. 算法训练 Torry的困惑(基本型)

    http://lx.lanqiao.org/problem.page?gpid=T129 算法训练 Torry的困惑(基本型)   时间限制:1.0s   内存限制:512.0MB      问题描述 ...

  7. maven笔记-入门(helloWorld)

    maven: pom.xml:文件 groupId,artifactId,Version定义了一个项目的基本坐标 groupId:定义了项目属于哪个组,往往与项目所在的组织和公司有关 artifact ...

  8. Codeforces Round #312 (Div. 2) E. A Simple Task

    题目大意就是给一个字符串,然后多个操作,每次操作可以把每一段区间的字符进行升序或者降序排序,问最终的字符串是多少. 一开始只考虑字符串中字符'a'的情况,假设操作区间[L,R]中有x个'a',那么一次 ...

  9. Linux 远程和本地的一些解决方案

     有的小伙伴想Linux 远程登录 两台机器同时root登录,其实可以同时多个用户的. Linux是多用户的多任务系统,可以同时多个用户登录到系统,也可以一个用户通过不同终端登录到一个系统执行不同的操 ...

  10. Android 播放视频文件

    package com.example.myvideo2; import java.io.File; import android.app.Activity; import android.net.U ...