using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace MonitorTerminal.udp
{
public class udp
{
/// 用于UDP发送的网络服务类
private UdpClient udpclient = new UdpClient();
///获取本地的IP地址
private string GetAddressIP()
{
string AddressIP = string.Empty;
foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
{
if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
{
AddressIP = _IPAddress.ToString();
return AddressIP;
}
}
return AddressIP;
}
const uint IOC_IN = 0x80000000;
static int IOC_VENDOR = 0x18000000;
int SIO_UDP_CONNRESET = (int)(IOC_IN | IOC_VENDOR | 12);
//开启多线程
public void udpRecStart(string IPstr,int port)
{
IPAddress localIP = IPAddress.Parse(IPstr);
IPEndPoint localIPEndPoint = new IPEndPoint(localIP, port);
udpclient = new UdpClient(localIPEndPoint);
udpclient.Client.IOControl((int)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, null);
Thread threadReceive = new Thread(ReceiveMessages);
threadReceive.IsBackground = true;
threadReceive.Start();
}
//udp接收
private void ReceiveMessages()
{
IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, 0);
while (true)
{
try
{
byte[] receiveBytes = udpclient.Receive(ref remoteIPEndPoint);
//dealUdpRecive(); //接收数据处理函数
}
catch
{
break;
}
}
}
//udp数据发送
public void udpDataSend(byte[] data, int len, string ip,int port)
{
udpclient.Send(data, len, ip, port);
}
//IP转换成数字地址
public uint IPToInt(string ipAddress)
{
string disjunctiveStr = ".,: ";
char[] delimiter = disjunctiveStr.ToCharArray();
string[] startIP = null;
for (int i = 1; i <= 5; i++)
{
startIP = ipAddress.Split(delimiter, i);
}
string a1 = startIP[0].ToString();
string a2 = startIP[1].ToString();
string a3 = startIP[2].ToString();
string a4 = startIP[3].ToString();
uint U1 = uint.Parse(a1);
uint U2 = uint.Parse(a2);
uint U3 = uint.Parse(a3);
uint U4 = uint.Parse(a4);
uint U = U1 << 24;
U += U2 << 16;
U += U3 << 8;
U += U4;
return U;
}
//数字地址转换成IP
public string IntToIP(uint ipAddress)
{
long ui1 = ipAddress & 0xFF000000;
ui1 = ui1 >> 24;
long ui2 = ipAddress & 0x00FF0000;
ui2 = ui2 >> 16;
long ui3 = ipAddress & 0x0000FF00;
ui3 = ui3 >> 8;
long ui4 = ipAddress & 0x000000FF;
string IPstr = "";
IPstr = System.Convert.ToString(ui1) + "."
+ System.Convert.ToString(ui2) + "."
+ System.Convert.ToString(ui3)
+ "." + System.Convert.ToString(ui4);
return IPstr;
}
}
}