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