Socket实现仿QQ聊天(可部署于广域网)附源码(4)-加入数据库系统搭建完成

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

时间: 2024-11-08 09:06:25

Socket实现仿QQ聊天(可部署于广域网)附源码(4)-加入数据库系统搭建完成的相关文章

Socket实现仿QQ聊天(可部署于广域网)附源码(1)-简介

1.前言 本次实现的这个聊天工具是我去年c#程序设计课程所写的Socket仿QQ聊天,由于当时候没有自己的服务器,只能在机房局域网内进行测试,最近在腾讯云上买了一台云主机(本人学生党,腾讯云有个学生专享活动一元一个月的云服务器,如果还是学生的可以试一下,地址http://www.qcloud.com/event/qcloudSchool),经过重新编码实现了广域网聊天的功能.下面开始介绍我的自制聊天软件啦!!! 2.功能 1. 聊天室服务器端的创建. 2. 聊天室客户端的创建. 3. 实现客户与

Android仿微信底部菜单栏+顶部菜单栏(附源码)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文要实现仿微信微信底部菜单栏+顶部菜单栏,采用ViewPage来做,每一个page对应一个XML,当手指在ViewPage左右滑动时,就相应显示不同的page(其实就是xml)并且同时改变底部菜单按钮的图片变暗或变亮,同时如果点击底部菜单按钮,左右滑动page(其实就是xml)并且改变相应按钮的亮度. 最终效果:源码免费下载 一.布局 1.顶部菜单布局,命名为top_layout.xml

iOS 未读消息角标 仿QQ拖拽 简单灵活 支持xib(源码)

一.效果 二.简单用法 超级简单,2行代码集成:xib可0代码集成,只需拖一个view关联LFBadge类即可 支持pod导入pod 'LFKit/LFBadge' //一般view上加角标 _badge1 = [[LFBadge alloc] init]; [_badge1 addToTabBarItem:_view1]; //BarButtonItem上加角标 _badge2 = [[LFBadge alloc] init]; [_badge2 addToBarButtonItem:self

Android仿UC浏览器左右上下滚动功能(附源码)

本文要解决在侧滑菜单右边加个文本框,并能实现文本的上下滑动和菜单的左右滚动.这里推荐可以好好看看android的触摸事件的分发机制,这里我就不详细讲了,我只讲讲这个应用.要实现的功能就像UC浏览器(或其它手机浏览器)的左右滚动,切换网页,上下滚动,拖动内容. 目录:一.功能要求与实现       二.布局与代码       三.原理与说明 本文的效果:(源码下载) 一.功能要求与实现 1.功能要求: (1)手指一开始按着屏幕左右移动时,只能左右滚动菜单,如果这时手指一直按着,而且上下移动了,那么

mina的编码和解码以及断包的处理,发送自定义协议,仿qq聊天,发送xml或json和

最近一段时间以来,mina很火,和移动开发一样,异常的火爆.前面写了几篇移动开发的文章,都还不错,你们的鼓励就是我最大的动力.好了,废话少说.我们来看下tcp通讯吧. tcp通讯对于java来说是很简单的.就是socket,也就是大家常说的套接字.大家不要把它看的很难.说白了tcp通讯其实就是数据流的读写.一条输入流,一条输出流.分别复杂发消息和接收消息. 明白了这些,ok,我们来看看我写的例子吧.先看服务器端的测试类的源码: package com.minaqq.test; import co

Android特效专辑(六)——仿QQ聊天撒花特效,无形装逼,最为致命

Android特效专辑(六)--仿QQ聊天撒花特效,无形装逼,最为致命 我的关于特效的专辑已经在CSDN上申请了一个专栏--http://blog.csdn.net/column/details/liuguilin.html 日后我所写的特效专辑也会以一添加在这个专栏上,今天写的这个特效,是关于聊天的,你肯定遇到过,就是你跟人家聊天的时候,比如发送应(么么哒),然后屏幕上全部就是表情了,今天我们就是做这个,撒花的特效,国际惯例,上图 截图 实现这样的效果,你要知道贝塞尔曲线,何谓贝塞尔曲线?其实

仿QQ聊天软件2.0版

仿QQ聊天软件2.0版 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907     上次课设做了Java版的仿QQ聊天程序,这次软件实训,我们继续完善了仿QQ聊天程序,将上次未完成及不完善的地方进行完善和改进,还新加了部分功能:表情输入.气泡模式.文件传输.截屏.语音聊天.逐步向QQ的基本功能靠齐.通过这次软件实训,又有了很多收获. 一.设计内容及要求 1.1综述 A.系统概述 我们要做的就是类似QQ这样的面向企业内部的聊天软件,基本功能和QQ类似.首先,

仿QQ聊天布局--iOS

虽然注册博客园这么久了,但很少在这上面写些东西,一来也是觉得自己能力不够,二来怕误人子弟,所以一直秉着“多看,多做,少说”的原则混迹在各论坛之中.但日子久了,觉着这其实是一种逃避的方法.思来想去,那些牛逼的人其实是那些能把自己心中所想完全表达出来,让人看之舒服,听之认同的人.所以,除了“多看,多做,少说”外,怕要加一条“多总结”,否则恐要淹死在这信息化的浪潮中了. 最近对QQ.微信聊天布局产生兴趣,便搜索资料试着搞搞,趁着空隙,先上效果图,得空再补充说明. 大致思路就是 自定义tableView

仿QQ聊天图文混排流程图【适用于XMPP】

图文混排流程图.graffle4.8 KB 下面附上图片素材: 表情.zip692.5 KB 下面是字符串与图片的详细对应关系: "[呲牙]"字符串对应于图片名    f000.gif; "[调皮]"字符串对应于图片名    f001.gif; "[流汗]"字符串对应于图片名    f002.gif; "[偷笑]"字符串对应于图片名    f003.gif; "[再见]"字符串对应于图片名    f004.