using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Collections; namespace moniopter
{
public static class UDPManager
{
//本机名称和IP
public static string ComputerName;
public static string ComputerIP; public const int listenProt = 10318;//设置端口号
static UdpClient listener = null;//提供的网络服务
static Thread listenter = null;//创建一个监听消息的进程
static bool islistenter;//是否要监听
public static bool IsMsgReader;//消息是否已读
static UDPManager()
{
IsMsgReader = true;
ComputerName = Dns.GetHostName();
ComputerIP = GetIPAddress();
islistenter = true; //加下面这句是为了在开启线程中可以访问控件属性
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
listenter = new Thread(StartListener);
listenter.Start();
} //关闭
public static void Close()
{
if (listener == null)
{
return;
}
try
{
listener.Close();//关闭探听消息服务
listenter.Abort();//关闭监听消息进程
}
catch{ }
} //获取IP
private static string GetIPAddress()
{
string AddressIP = "";
//第一种办法获取
foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
{
if (_IPAddress.AddressFamily.ToString().ToLower() == "internetwork")
{
return _IPAddress.ToString();
}
}
//第二种办法获取
if (AddressIP == "")
{
IPHostEntry myEntry = Dns.GetHostEntry(System.Net.Dns.GetHostName());
if (myEntry.AddressList.Length > 1)
{
if (myEntry.AddressList[0].ToString().IndexOf('.') > 0)
{
AddressIP = myEntry.AddressList[0].ToString();
}
else
{
AddressIP = myEntry.AddressList[1].ToString();
}
AddressIP = myEntry.AddressList[1].ToString();
}
else
{
AddressIP = myEntry.AddressList[0].ToString();
}
}
return AddressIP;
} public delegate void Listenter(string UIP, string msg); public static event Listenter OnListenter; //开始监听
private static void StartListener()
{
listener = new UdpClient(listenProt); //使用UDP协议
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenProt); //任意IP,
try
{
while (islistenter)//处于监听状态
{
byte[] bytes = listener.Receive(ref groupEP);
string Uip = groupEP.Address.ToString();//发信人的IP
string strInfo = Encoding.GetEncoding("gb2312").GetString(bytes, 0,
bytes.Length);//获得信息
string[] msg = { Uip, strInfo };//放入ip,和内容
OnListenter(Uip, strInfo);
}
}
catch { }
finally
{
listener.Close();
}
} /// <summary>
/// 发送消息 string
/// </summary>
/// <param name="msg"></param>
/// <param name="ipStr"></param>
public static void Send(string msg, string ipStr)
{
Socket s = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
try
{
IPAddress broadcast = IPAddress.Parse(ipStr);
byte[] sendbuf = Encoding.GetEncoding("gb2312").GetBytes(msg);
IPEndPoint ep = new IPEndPoint(broadcast, listenProt); //65507 可发送最大byte 64512
if (sendbuf.Length <= 64512)
{
s.SendTo(sendbuf, ep);
}
}
catch { }
finally
{
s.Close();
}
} }
}

  

简单 UDP 操作类的更多相关文章

  1. [C#]exchange发送,收件箱操作类

    最近项目中需要用到exchange的操作,就参照msdn弄了一个简单的操作类.目前先实现了,发送邮件和拉取收件箱的功能,其他的以后在慢慢的添加. using Microsoft.Exchange.We ...

  2. 使用jxl操作之一: 实现对Excel简单读写操作

    项目目录树 对象类UserObject UserObject.java package com.dlab.jxl; public class UserObject { private String u ...

  3. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

  4. 一个简单的ORM制作(CURD操作类)

    SQL执行类 CURD操作类 其他酱油类 此篇是为上篇文章填坑的,不知道上篇砸过来的砖头够不够,不够的话请大家继续砸. CURD操作类负责将用户提供的条件转换为SQL语句,并提供给IHelper执行, ...

  5. 简单的php数据库操作类代码(增,删,改,查)

    这几天准备重新学习,梳理一下知识体系,同时按照功能模块划分做一些东西.所以.mysql的操作成为第一个要点.我写了一个简单的mysql操作类,实现数据的简单的增删改查功能. 数据库操纵基本流程为: 1 ...

  6. 3.NetDh框架之缓存操作类和二次开发模式简单设计(附源码和示例代码)

    前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...

  7. 2.NetDh框架之简单高效的日志操作类(附源码和示例代码)

    前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...

  8. 简单的XML操作类

    /// <summary> /// XmlHelper 的摘要说明. /// xml操作类 /// </summary> public class XmlHelper { pr ...

  9. Java 数据库简单操作类

    数据库操作类,将所有连接数据库的配置信息以及基本的CRUD操作封装在一个类里,方便项目里使用,将连接数据库的基本信息放在配置文件 "dbinfo.properties" 中,通过类 ...

随机推荐

  1. Flutter文本框TextField

    参数详解TextField同时也使用Text 的部分属性: 属性 作用controller 控制器,如同 Android View iddecoration 输入器装饰keyboardType 输入的 ...

  2. UEFI和GPT

    好就没用linux了,这几天在win8笔记本上用虚拟机装了下,也准备装到硬盘上和win8双系统使用,发现一些概念已经跟不上时代了. 一个是在虚拟机中装的时候,分配了虚拟硬盘分区时,提示选择分区表类型, ...

  3. Python是否存在方法方法重载及是否可以不显示声明初始化方法

    一.python中是否存在方法重载 对java有了解的程序员都知道,java中存在构造方法重载和普通方法重载,重载指的是方法名相同,参数列表不同的多个方法.python中是否也支持这两种方法重载,测试 ...

  4. JScript 程序流程控制

    Jscript 脚本中的语句一般是按照写的顺序来运行的.这种运行称为顺序运行,是程序流的默认方向. 与顺序运行不同,另一种运行将程序流转换到脚本的另外的部分.也就是,不按顺序运行下一条语句,而是运行另 ...

  5. 微信小程序之地址联动

    这就是我们要实现的效果 <view class="consignee"> <!-- consignee 收件人 --> <text>收件人: & ...

  6. 用Intellij idea搭建solr调试环境

    最近在使用solr时,配置会有一些问题,log里面打印出日志了,但是还是不知道发生这样错误的原因.于是想学习一下相关的solr源码,以下是如何搭建solr调试环境步骤. solr调试环境搭建,首先下载 ...

  7. 浅谈 Nginx和LVS的各种优缺点

    VS的负载能力强,因为其工作方式逻辑非常简单,仅进行请求分发,而且工作在网络的第4层,没有流量,所以其效率不需要有过多的忧虑. LVS基本能支持所有应用,因为工作在第4层,所以LVS可以对几乎所有应用 ...

  8. NJCTF (easycrack)

    安装app查看.一个输入框,输入随便输入显示Try again. 放入JEB反编译. 关于输入框监听是第一次见,具体可以看看这个博客https://www.jianshu.com/p/f976c677 ...

  9. <转>常规测试方法

    功能测试 1. 安装测试: 安装过程中对于缺省安装目录及任意指定的安装目录,是否都能正确安装: 若是选择安装,查看能否实现其相应的功能: 在所有能中途退出安装的位置退出安装程序后,验证此程序并未安装成 ...

  10. 【AMAD】django-guradian -- 为Django加入单个对象级别的权限

    动机 简介 个人评分 动机 django默认的permission系统就是将将能用的程度.默认授权会将一个数据表所有数据的权限都授予,而现实世界不是这样.很多时候,我们仅想授权数据的一小部分给用户. ...