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. C++入门经典-例9.1-函数模板,函数模板的作用,使用数组作为模板参数

    1:函数模板不是一个实在的函数,因此编译器不能为其生成可执行的代码.定义函数模板只是一个对函数功能框架的描述,在具体执行时,将根据传递的实际参数决定其功能. 2:函数模板定义的一般形式如下: temp ...

  2. Mac平台最好用的万能开源免费播放器-IINA

    1.安装 1)官网下载地址 https://iina.io/ 2)brew 方式安装 testdeMacBook-Pro:~ test$ brew cask install iina Updating ...

  3. windows实用cmd命令总结

    D: 进入D盘 cd D:\eclipse   进入D盘后进入D盘下的某个路径 Ipconfig 查看计算机ip Cls 清空命令行 ping ip(主机名) 测试网络是否畅通 Help 查看所有的d ...

  4. 如何删除link-local(169.255.0.0) 路由表项

    route -n 时你总能看到这样一条路由Destination Gateway Genmask Flags Metric Ref Use Iface169.254.0.0 0.0.0.0 255.2 ...

  5. SD相关号码范围IMG设定

    一.定义项目建议的号码范围——OVZA.VN01 二.免费货物的号码范围——WC07 三.定义销售文件的号码范围——VN01 四.金额契约产品建议模组的号码范围——WSN1 五.定义出口.进口的号码范 ...

  6. NLP之中文自然语言处理工具库:SnowNLP(情感分析/分词/自动摘要)

    一 安装与介绍 1.1 概述 SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个 ...

  7. 关于JavaScript实例化的理解

    要理解这个,我们首先要理解一个概念“类”,所谓类,指的是对象的模版.对象就是类的实例.由前面我们知道,对象是单个实物的抽象,所以通常需要一个模版,表示某一类实物的共同特征,然后对象根据这个模版生成,这 ...

  8. 【HANA系列】SAP HANA SQL条件判断是NULL的写法

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL条件判断 ...

  9. 【Python开发】Url中文字符时记得转码edcode("utf-8")

    在url中使用中文其实是一个坏习惯,会带来一系列的转码问题, 我更喜欢英文译名或者id来标识某个uri.但是现实往往是残酷的, 特别是在我们调用别人服务时候,有时候被逼无奈使用中文URL. Pytho ...

  10. 【VS开发】【DSP开发】浅谈Linux PCI设备驱动(一)

    要弄清楚Linux PCI设备驱动,首先要明白,所谓的Linux PCI设备驱动实际包括Linux PCI设备驱动和设备本身驱动两部分.不知道读者理不理解这句话,本人觉得这句话很重要,对于PCI.US ...