實現動態系統托盤圖標
阿新 • • 發佈:2018-12-16
系統 模式 sse threads lose read 斷線 ethos 寫入
實現效果:
知識運用:
TcpListener TcpClient 和 NetworkStream類 及 Timer組件
1> TcpListener類 //用來從Tcp網絡客戶端偵聽連接
2> TcpClient類 //為Tcp網絡服務提供客戶端連接
public TcpClient(string hostname,int port) //遠程主機的DNS名 端口號
3> NetworkStream類 //提供在阻止模式下通過Stream套接字發送和接受數據的方法
//其Read方法用於從NetworkStream類讀取數據
public override int Read(byte[] buffer,int offset,int size)
4> notifyIcon控件的Icon屬性
實現代碼:
//該方法用於監聽指定端口 並通過該端口發送消息 private void StartListen() { tcpListener = new TcpListener(888); //創建TcpListener對象 tcpListener.Start(); //開始監聽 while (true) { TcpClient client = tcpListener.AcceptTcpClient(); //接受連接請求 NetworkStream nstream = tcpListener.AcceptTcpClient().GetStream(); //獲取數據流 byte[] mbyte = new byte[1024]; //建立緩存 int i = nstream.Read(mbyte, 0, mbyte.Length); //將數據流寫入緩存 message = Encoding.Default.GetString(mbyte, 0, i); //獲取傳輸的內容 } } private void button2_Click(object sender, EventArgs e) { try { //IPAddress[] ip = Dns.GetHostAddresses(Dns.GetHostName()); //獲取本機地址 string message = "幹得好,賞啤酒一箱"; //傳輸的內容 TcpClient client = new TcpClient(textBox1.Text, 888); //創建TcpClient對象 NetworkStream netstream = client.GetStream(); //創建NetworkStream對象 StreamWriter wstream = new StreamWriter(netstream, Encoding.Default); //創建StreamWriter對象 wstream.Write(message); //將信息寫入流 wstream.Flush(); wstream.Close(); //關閉流 client.Close(); //關閉TcpClent對象 } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } bool k = true; //一個標記用於控制圖標閃動 private void timer1_Tick(object sender, EventArgs e) { if (message.Length > 0) { //如果網絡中傳輸了數據 notifyIcon1.Text = message; if (k) { notifyIcon1.Icon = Properties.Resources._1; //托盤圖標為1 k = false; } else { notifyIcon1.Icon = Properties.Resources._2; //托盤圖標為2 k = true; } } } private void Form1_Load(object sender, EventArgs e) { td = new Thread(new ThreadStart(this.StartListen)); //通過線程調用StartListen方法 td.Start(); //開始運行線程 } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { if (tcpListener != null) { tcpListener.Stop(); //停止偵聽對象 } if (td != null) { if (td.ThreadState == ThreadState.Running) //判斷線程是否運行 td.Abort(); //終止線程 } } private void button1_Click(object sender, EventArgs e) { message = ""; //清空傳輸內容 }
實現動態系統托盤圖標