Skip to content

yashuangyi/Simulation-QQ

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SocketSoftware

功能:仿QQ(局域网一对多聊天)

语言:C#(Winform)

平台:Visual Studio 2019

数据库:MySQL

时间:2019-11-18~2019-11-27


步骤

  1. 参考QQ软件设计界面,达到界面仿真效果
  2. 建立数据库,存储用户账号、密码等信息
  3. 提供注册账号、找回密码功能
  4. 创建服务端、客户端
  5. 测试服务端、客户端是否能建立通信
  6. 编码实现文本传输
  7. 编码实现表情、图片传输
  8. 编码实现文件传输

简介

仿真QQ,可实现局域网一对多通信(包括传文本、图片、表情、文件(我设置了最大200M,可自行在代码修改缓冲区大小)),亦可本机自己开两个程序对聊。


使用说明(Win系统)

首先要建立数据库(我用的Navicat),格式在"database.png",仿照建立即可,记得在UserData代码中修改连接数据库的信息(数据库的端口记得让防火墙允许连接);其次我设立的Socket服务端侦听端口为6666,阁下可在cmd输入“netstat -an”查看此端口有无被占用,若有则在UserData代码更改成未被占用的一端口;接下来要在防火墙的入站规则新建规则,允许此端口被连接。完成上述操作后即可通信~


心得

11月18号晚上,我把登陆界面和聊天界面做了出来;19号则把主界面设计出来;20号我建立数据库,并完成注册账号以及找回密码功能;21号到23号队友在熟悉数据库并把数据库信息与界面衔接起来,而我在忙C#的数据库作业;24号我开始实现通信功能,刚开始只有传输文本,很快就实现了功能,后面当我加上判断传输的是文本还是图片时,就出现错误,文本能传输而传图片的时候有的能传有的则成了看不懂的字母。我百思不得其解,我怀疑是我写的通信方法有问题,因此卡了整整一天,然而在25号晚上我灵光一闪,发现了大BUG,那就是通信时是另一个线程,我写的while()循环是在这个线程跑的,而当标志量取true时while循环实际上不知道跑到哪个if else的判断语句了,所以才会出现有的图片能传有的则变成字母的现象;然后我把标志量改成三个锁后还是不行,我又发现原来screen作为一个变量,多线程情况下有可能会多个线程同时访问它,造成错误,因此我给screen加了lock,确保同一时间只有一个线程访问它;然而还是有问题,那就是只有一方传另一方再传时双方才会同时发送数据,我又卡了半天,终于在26号晚上发现bug,那就是这个标志量实际上只在自己这标志着,并没有传递给对方,因此对方根本不知道这边传的是文本还是文件还是照片,所以我在想办法,想一个既能传递信号又不会影响原有数据的方法,这时我想到了ip数据报,它的头部不也有信息吗?所以我在字节流头部分别加上不同标志,对方接收后判断标志信息并去除标志头部,这样便实现了准备送达数据的功能。


截图

  • 登录界面

    login

  • 注册界面

    register

  • 主界面

    main

  • 聊天界面

    chat

About

Winform+Socket+MySQL——仿真QQ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published