1.前言web
這是本系列的第四篇文章,上一篇咱們講到實現了客戶端對客戶端的抖屏與收發各類類型文件,本篇文章咱們加入SQLServer數據庫實現登陸與好友的添加等功能,並對界面作了美化處理。嚮往常同樣我會把聊天服務器部署到廣域網服務器上,到時候你們就能夠能夠在源碼裏面打開客戶端與我聊天啦!(這只是一個初級版功能簡單不支持離線消息,因此聊天的前提是我在線(用戶ID爲19931221,就是我啦。)……),也能夠本身打開兩個客戶端測試一下,程序的部署文檔放在個人源碼根目錄下。數據庫
2.本篇實現功能c#
0. 數據庫簡單設計。安全
1. 服務端管理優化與界面美化。服務器
2.客戶端的登陸,註冊,找回密碼。架構
3.客戶端的歡迎界面搭建。dom
4.客戶端的聊天界面搭建(核心)。ide
5.客戶端的我的信息浮動展現。測試
6.客戶端的添加好友。優化
7.客戶端的用戶頭像修改。
8.我的詳細信息操做。
9.好友的精確查找。
3.具體實現
(0) 數據庫簡單設計。
數據庫表分爲用戶表,以及其餘幾個詳細信息表,以及好友表。結構以下
在此基礎上搭建了一個三層架構。實現對數據的增刪改查。
(1)服務端管理優化與界面美化。
在原有的基礎上添加了,數據管理,數據提交功能。實現對客戶端的管理(通常數據庫操做,這裏就不貼代碼啦,有興趣能夠下源碼)。如圖:
(2)客戶端的登陸,註冊,找回密碼。
a.登陸-對用戶名,密碼,驗證碼驗證。這裏貼一段使用GDI+寫的驗證碼(能夠收藏一下,web ,winform通用),點擊pictureBox進行驗證圖片切換。代碼以下:
1 private void pictureBox3_Click(object sender, EventArgs e) 2 { 3 Random x = new Random(); 4 s= null; 5 for (int i = 0; i < 5; i++) 6 { 7 int num = x.Next(0, 10); 8 s += num; 9 } 10 //MessageBox.Show(s); 11 Bitmap bmap = new Bitmap(80, 30); 12 Graphics g = Graphics.FromImage(bmap); 13 for (int i = 0; i < 5; i++) 14 { 15 Point p = new Point(i * 13, 0); 16 string[] fonts = { "微軟雅黑", "宋體", "黑體", "隸書", "仿宋" }; 17 Color[] colors = { Color.Black, Color.Blue, Color.Red, Color.Green, Color.Orange }; 18 g.DrawString(s[i].ToString(), new Font(fonts[x.Next(0, 5)], 20, FontStyle.Bold), new SolidBrush(colors[x.Next(0, 5)]), p); 19 20 } 21 for (int i = 0; i < 10; i++) 22 { 23 Pen pen = new Pen(Brushes.Gray); 24 Point p2 = new Point(x.Next(0, bmap.Width), x.Next(0, bmap.Height)); 25 Point p3 = new Point(x.Next(0, bmap.Width), x.Next(0, bmap.Height)); 26 g.DrawLine(pen, p2, p3); 27 } 28 for (int i = 0; i < 200; i++) 29 { 30 Point p1 = new Point(x.Next(0, bmap.Width), x.Next(0, bmap.Height)); 31 bmap.SetPixel(p1.X, p1.Y, Color.Green); 32 } 33 pictureBox3.Image = bmap; 34 }
效果:
b.註冊,注意:裏面要填的一卡通ID,是我當初作時把咱們學生的一卡通做爲了用戶主鍵ID,測試時你們能夠隨便填一個。
c.找回密碼:
(3)客戶端的歡迎界面搭建。
(4)客戶端的聊天界面搭建(核心)。
實現了與好友的普通聊天,發送抖屏,收發文件,(若當前接收的消息不爲當前聊天窗體時會在主界面出現聊天提醒如圖三,)。
注意好友在線列表45秒刷新一次,圖界面會出現稍微的卡頓。測試時要等45秒纔會刷新好友列表。
聊天的核心原理已經在第三篇中講解,這裏主要作了一些界面的美化。效果以下:
(5)客戶端的我的信息浮動展現。
實現原理爲根據當前主窗體的大小及位置,肯定浮動展現出如今左方仍是右方。再加入MouseEnter,MouseLeave事件,代碼以下
1 private void pictureBox1_MouseEnter(object sender, EventArgs e) 2 { 3 int UserTop = Top + 20; 4 int UserLeft = Left - 250; 5 //屏幕不包括任務欄的高度 6 int PH = Screen.GetWorkingArea(this).Height; 7 //判斷是否超過屏幕高度 8 if (UserTop + 181 > PH) 9 { 10 UserTop = PH - 181 - 5; 11 } 12 //判斷是否小於屏幕左邊 13 if (UserLeft < 0) 14 { 15 UserLeft = Right + 5; 16 } 17 //窗體不爲空傳值 18 if (myHead != null) 19 { 20 if (myHead.IsDisposed) 21 { 22 myHead = new MyHead(); 23 myHead.nowuser = nowuser; 24 myHead.Show(); 25 } 26 else 27 { 28 myHead.Location = new Point(UserLeft, UserTop); 29 myHead.nowuser = nowuser; 30 myHead.Show(); 31 } 32 33 } 34 else //窗體爲空New一個 35 { 36 myHead = new MyHead(); 37 myHead.nowuser = nowuser; 38 myHead.Show(); 39 } 40 } 41 42 private void pictureBox1_MouseLeave(object sender, EventArgs e) 43 { 44 Thread.Sleep(100); 45 if (myHead != null && !myHead.Bounds.Contains(Cursor.Position)) 46 { 47 myHead.Hide(); 48 } 49 }
(6)客戶端的添加好友。
經過輸入ID進行添加好友,也能夠進入詳細搜索
(7)客戶端的用戶頭像修改。
經過一個listview控件展現頭像,並對用戶頭像更新
(8)我的詳細信息操做。
a.我的資料
b.安全設置
(9)好友的精確查找。
(4)總結
本次咱們實現了加入SQLServer數據庫實現登陸與好友的添加等功能,並對界面作了美化處理。到如今一個基本的聊天軟件基本上搭建完成了。本篇有不少的截圖,代碼量很少,若是對具體實現感興趣的話能夠下一個源碼看一下。最後你能夠打開源碼的客戶端,註冊一個帳戶,查找用戶ID爲19931221的就是我,能夠與我聊天,我會把服務器部署到廣域網上。或者打開兩個客戶端本身聊天(不須要運行服務端,默認是個人服務器 IP,理論上有網就能夠聊天),趕快試一下吧!!!(根目錄下有配置文檔必定要看哦)
這個系列到目前基本已經完結,後續朋友有什麼功能需求能夠給我留言,我再添加。這個只是一個小例子(在個人c#課程設計做業的基礎上進行完善的),但願你們多多指教。
待續。。。。。。。。。。。。。。。。。。。。。,期待您的關注
MyChatV2.0源碼地址:http://pan.baidu.com/s/1eRENjDg
源碼裏的Sql腳本有問題改正後的腳本地址:http://pan.baidu.com/s/1cBiokm