using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Windows.Forms; using Microsoft.Win32; using UDPClient.Properties; namespace UDPClient { public partial class Frm_Client : Form { Icon icoOn = Resources.IconOn; Icon icoOff = Resources.IconOff; bool isOn; bool isTwinkle; static UdpClient client; static IPEndPoint serverendpoint; static System.Windows.Forms.Timer tmr = new System.Windows.Forms.Timer(); public Frm_Client() { InitializeComponent(); } private void Frm_Client_Load(object sender, EventArgs e) { //开机自启动添加 string path = Application.ExecutablePath; RegistryKey rk = Registry.LocalMachine.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run"); rk.SetValue("SixiBroadcast", path); rk.Close(); //初始化数据 client = new UdpClient(new IPEndPoint(IPAddress.Any, 25333)); serverendpoint = new IPEndPoint(IPAddress.Loopback, 25433); //启动客户端监听 Thread t = new Thread(new ThreadStart(ClientThread)); t.IsBackground = true; t.Start(); //启动Web监听 Thread w = new Thread(new ThreadStart(WebListen)); w.IsBackground = true; w.Start(); //初始化Timer tmr.Interval = 390; tmr.Tick += tmr_Tick; tmr.Enabled = true; notifyIcon.ShowBalloonTip(1000, "四喜消息提示", "欢迎使用四喜消息提示系统!", ToolTipIcon.Info); } void tmr_Tick(object sender, EventArgs e) { if (!isTwinkle) return; if (isOn) { isOn = false; notifyIcon.Icon = icoOff; } else { isOn = true; notifyIcon.Icon = icoOn; } } public static IPAddress GetHostIP() { string strHostName = Dns.GetHostName(); //得到本机的主机名 IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); //取得本机IP foreach (var item in ipEntry.AddressList) { if (!item.IsIPv6LinkLocal) { return item; } } return null; } private void WebListen() { try { HttpListener listerner = new HttpListener(); listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证 Anonymous匿名访问 listerner.Prefixes.Add("http://127.0.0.1:2533/web/"); listerner.Start(); Console.WriteLine("网页服务器开始监听......."); while (true) { //等待请求连接 //没有请求则GetContext处于阻塞状态 HttpListenerContext ctx = listerner.GetContext(); ctx.Response.StatusCode = 200;//设置返回给客服端http状态代码 string username = ctx.Request.QueryString["username"]; if (username != null && username.Length > 0) { IPAddress addr = GetHostIP(); string str = username + " " + (addr == null ? "null" : addr.ToString()) + " 25333"; Console.WriteLine(str); byte[] buf = Encoding.UTF8.GetBytes(str); client.Send(buf, buf.Length, serverendpoint); notifyIcon.ShowBalloonTip(1000, "四喜消息提示", "用户登录成功!", ToolTipIcon.Info); } ctx.Response.Close(); } } catch (Exception e) { Console.WriteLine("网页服务器出现错误: " + e.Message); } } private void ClientThread() { try { Console.WriteLine("客户端开始监听..."); while (true) { byte[] buf = client.Receive(ref serverendpoint); string msg = Encoding.UTF8.GetString(buf); isTwinkle = true; notifyIcon.ShowBalloonTip(1000, "四喜消息提示", msg, ToolTipIcon.Info); } } catch (Exception e) { Console.WriteLine("UDP客户端出现错误: " + e.Message); client.Close(); } } private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e) { isTwinkle = false; notifyIcon.Icon = icoOn; } private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) { Close(); } } }