1.前言
這是本系列的第四篇文章,上一篇我們講到實現了客戶端對客戶端的抖屏與收發各種類型文件,本篇文章我們加入SQLServer數據庫實現登錄與好友的添加等功能,並對界面做了美化處理。向往常一樣我會把聊天服務器部署到廣域網服務器上,到時候大家就可以可以在源碼里面打開客戶端與我聊天啦!(這只是一個初級版功能簡單不支持離線消息,所以聊天的前提是我在線(用戶ID為19931221,就是我啦。)……),也可以自己打開兩個客戶端測試一下,程序的部署文檔放在我的源碼根目錄下。
2.本篇實現功能
0. 數據庫簡單設計。
1. 服務端管理優化與界面美化。
2.客戶端的登錄,注冊,找回密碼。
3.客戶端的歡迎界面搭建。
4.客戶端的聊天界面搭建(核心)。
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