当前位置:文档之家› c#实现网络聊天室(socket)仿QQ课程设计

c#实现网络聊天室(socket)仿QQ课程设计

c#实现网络聊天室(socket)仿QQ课程设计
c#实现网络聊天室(socket)仿QQ课程设计

Visual C#程序设计

课程设计(报告)题目: 网络聊天室

专业班级:地信131

学生姓名:胡宏勇

学号:1220130912

完成时间:_________ 2015.7.12______________________

任务书

项目四网络聊天室

4.1、目的与要求

1. 目的:

1)要求学生达到熟练掌握.NET基本结构以及C#语言的基本知识和技能;

2)基本掌握面向对象程序开发的基本思路和方法;

3)掌握网络程序开发的基本知识;

4)能够利用所学的基本知识和技能,进行简单的网络通信程序设计。

2. 要求

基本要求:

1)要求利用C#的编程思想以及套接字开发原理来完成系统的设计;

2)突出C#语言与其它语言不同点(即体现C#的高级功能,如属性概念、接口、事件、委托等);

3)体现可视化编程基本东西,如系统带有菜单、工具栏、状态栏以及一些常用的高级控件。

创新要求:

在基本要求达到后,可进行创新设计,如加入文件传输功能,以及远程控制功能。

4.2、信息描述

有关该系统基本信息的描述,如:客户端实例的信息等。类似于QQ。

4.3、功能描述

1. 聊天室服务器端的创建。

2. 聊天室客户端的创建。

3. 实现客户与服务器的连接通讯。

4. 实现客户之间的私聊。

5. 实现客户端的在线信息显示。

6. 实现服务器端当前在线客户信息。

7. 保存谈话记录。

4.4、解决方案

1. 首先进行需求分析,搞清楚系统功能和任务。

2. 然后总体设计中确定模块结构,划分功能模块,将软件功能需求分配给所划分的最小单元模块。确定模块间的联系,确定数据结构、文件结构、数据库模式,确定测试方法与策略。

3. 详细设计中为每个模块确定采用的算法,选择适当的工具表达算法的过程(流程图),描述模块的详细过程;确定每一模块使用的数据结构;确定模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其它模块的接口。

4. 依据分析编写C#代码。

目录

1.需求分析 - - - - - - - - - - - - - - - - - - - - 1 1.1 摘要

1.2 系统开发背景

1.3聊天软件的开发目标

2.概要设计 - - - - - - - - - - - - - - - - - - - - 2

2.1 服务器端

2.2 客户端

3.详细设计 - - - - - - - - - - - - - - - - - - - - 3

4.编码 - - - - - - - - - - - - - - - - - - - - 6

4.1 服务器端核心编码

4.2 客户端核心代码

5.调试分析 - - - - - - - - - - - - - - - - - - - 18

6.用户使用说明 - - - - - - - - - - - - - - - - - 27

7.课程设计总结 - - - - - - - - - - - - - - - - 28

8.参考文献 - - - - - - - - - - - - - - - - - - - 28

1.需求分析

1.1摘要

作为除电视、报纸、广播之外的第四大媒体,互联网不仅成为人们获取新闻信息的主要来源,更成为了人们闲暇之余的一种休闲手段。随着互联网技术的发展,各种各样基于网络的应用也随之诞生,网络聊天工具便是其中的一种。本文采用Visual Studio 2010+SQL Server 2008开发环境,结合WinForms、https://www.doczj.com/doc/7312356188.html, 等多种技术,实现了一个类似QQ的网络聊天工具,并在WINDOWS平台上加以了实现。通过C#语言进行网络编程,通过公共的数据库交换各种信息,实现了人性化的界面设计与功能设计。软件经过测试,满足现代人们即时通信的需求,达到预期的设计效果,对网络聊天工具的人性化设计具有一定的现实意义,同时也为其他相关项目的设计提供了参考。

关键词:网络聊天工具C# 即时通信数据库人性化

1.2 系统开发背景

在互联网相当普及的今天,你们对网络的依赖越来越大,越来越离不开网络,网络聊天更是成为了人们的“家常便饭”。通过网络聊天工具,人们足不出户就可进行闲聊甚至工作会谈,极大地方便了人们的日常生活与工作需求。

常用的网络聊天工具主要是QQ与MSN。MSN主要用于国际,而国内的主流网络聊天工具是QQ。为了方便同学之间的交流,我决定设计一个类似QQ并且无垃圾信息的网络聊天工具,此外也希望通过本次课程设计能更好地学习与掌握网络软件编程知识。

1.3 聊天软件的开发目标

本次课程设计的主要工作是设计一个类似QQ的网络即时聊天工具,主要是采用WinForms+https://www.doczj.com/doc/7312356188.html,+Socket通信技术实现。软件功能主要包括用户注册、用户登录、用户间聊天、查找/添加好友、个人设置以及服务器的搭建等。客户端通过公共的数据库交换信息,消息的发送和读取都是通过Socket通信技术和操作数据库来完成的。在程序中采用定时扫描数据库的方式来查找登录用户。以及Socket通信技术实现信息交换。

2.概要设计

(1)数据库端

MODEL类:数据库的模型层包括Users(用户层)Stars(用户所对应的星座)Friends(用户之间的好友关系层)BloodType(用户所对应的血型)

DAL类:sqlHelper(数据库与数据层DAL的连接类)UsersDAL(用户的数据层)StasDAL(用户所对应的星座数据层)FriendsDAL(用户之间的好友关系的数据层)BloodTypeDAL(用户所对应的血型的数据层)

BLL类:UsersBLL(用户的业务层)StarsBLL(用户所对应的星座的业务层)FriendsBLL(用户之间的好友关系的业务层)BloodTypeBLL(用户所对应的血型的业务层)

(2)服务器端

Server类:ClientManager(客户端通信管理类)DGSendMsg(显示消息的委托类)MainServer(主窗体)

(3)客户端

新建客户端类:Login(登录主窗体)FrmInformation(登录后的消息提示)MainList (主界面与聊天窗口)AddFriend(通过Id添加好友)Apply(申请号码)forgetpwd (找回密码)HeadList(选择更换头像)MyDetail(个人详细资料设计)MyHead (浮动头像框)Search(不同条件查询好友)

3.详细设计

设计中定义的所有数据类型涉及太多就不一一列出,下面是我程序个个的调用流程图。

(1)(模型层-数据层-业务层)

(业务层与UI 层)

模 型 层 M O D E L Users (用户层)

Stars (用户的星座) Friends (用户好友关系层) BloodType (用户所对应的血型) 数 据 层 D A L sqlHelper UsersDAL FriendsDAL BloodTypeDAL StasDAL

SQLServer

业务层

B

UsersBLL StarsBLL

业务层

用户详细信息以及当前登录的IP和端口号

(客户端与服务器通信)

4.编码

(1)(服务器端核型代码)

//服务器监听套接字

Socket sokServer = null;

//监听线程

Thread thrServer = null;

//客户端管理类

ClientManager clientManage = null;

https://www.doczj.com/doc/7312356188.html,ersBLL userBll = new https://www.doczj.com/doc/7312356188.html,ersBLL();

//点击开启服务器

private void btnSerStar_Click(object sender, EventArgs e)

{

try

{

sokServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

IPAddress ip = IPAddress.Parse(txtSerIP.Text.Trim());

//创建端口号对象

IPEndPoint point = new IPEndPoint(ip, int.Parse(txtSerPort.Text.Trim()));

// 监听

sokServer.Bind(point);

//最多连几个

sokServer.Listen(Convert.ToInt32(cmbSerMax.SelectedItem));

//开启新线程

thrServer = new Thread(WatchConnection);

thrServer.IsBackground = true;

thrServer.Start();

//管理类对象实例化

clientManage = new ClientManager(listChat, AppendMsg);

AppendMsg("开始监听~~~~!" + DateTime.Now.ToString());

}

catch (Exception ex)

{

MessageBox.Show("异常:" + ex.Message + DateTime.Now.ToString());

AppendMsg("异常:" + ex.Message + "1" + DateTime.Now.ToString());

}

}

bool isWatching = true;

void WatchConnection()

{

try

{

while (isWatching)

{

//负责通信的socket

Socket sokMsg = sokServer.Accept();

//加入通信管理类

clientManage.AddClient(sokMsg);

txtOnlineCount.Text = listChat.Items.Count.ToString();

}

}

catch (SocketException ex1)

{

AppendMsg("异常:" + ex1.Message + "2"+DateTime.Now.ToString());

}

catch (Exception ex)

{

AppendMsg("异常:" + ex.Message + "3" + DateTime.Now.ToString());

}

}

//通信管理类

///

/// 客户端管理

///

public class ClientManager

{

//好友列表控件

private System.Windows.Forms.ListBox listClient;

DGSendMsg dgSendMsg;

//通信套接字key :客户端ip value :对应的通信套接字

private Dictionary ClientSocket;

public ClientManager()

{ }

///

/// 客户端管理类

///

/// 列表控件

/// 显示消息

public ClientManager(System.Windows.Forms.ListBox lb,DGSendMsg dgSendMsg)

{

this.listClient = lb;

this.dgSendMsg = dgSendMsg;

// dictClientSocket = new Dictionary();

ClientSocket = new Dictionary();

}

///

/// 添加通信套接字

///

/// 负责通信的socket

public void AddClient(Socket sokMsg)

{

//获取客户端通信套接字

string strEndPoint = sokMsg.RemoteEndPoint.ToString();

//通信套接字加入字典

ClientSocket.Add(strEndPoint, sokMsg);

//显示列表

System.Threading.Thread.Sleep(500);

https://www.doczj.com/doc/7312356188.html,ersBLL userbll = new UsersBLL();

Users adduser= userbll.SelectByIp(strEndPoint);

listClient.Items.Add(strEndPoint + "---" + https://www.doczj.com/doc/7312356188.html, + "---" + adduser.Id + "---" + DateTime.Now.ToString());

Thread thrMag = new Thread(ReciveMsg);

thrMag.IsBackground = true;

thrMag.Start(sokMsg);

dgSendMsg(strEndPoint + "成功连接上服务端~~~!" + DateTime.Now.ToString());

}

bool isReceing = true;

void ReciveMsg(object sokMsgObj)

{

Socket sokMsg=null;

try

{

//sokMsg接收消息的socket

sokMsg = sokMsgObj as Socket;

byte[] arrMsg = new byte[5 * 1024 * 1024];

while (isReceing)

{

//接收到消息

//测试

int realLength = sokMsg.Receive(arrMsg);

if (realLength==0)

{

RemoveClient(sokMsg.RemoteEndPoint.ToString());

}

string strMsg = Encoding.UTF8.GetString(arrMsg, 0, realLength);

//dgSendMsg(strMsg);

SendMsgToClient(strMsg);

string[] msgTxt = strMsg.Split('|');

if (msgTxt.Length<1)

{

RemoveClient(sokMsg.RemoteEndPoint.ToString());

}

}

}

catch

{

RemoveClient(sokMsg.RemoteEndPoint.ToString());

}

}

public void RemoveClient(string strClientID)

{

if (listClient.Items.Contains(strClientID))

{

listClient.Items.Remove(strClientID);

}

if (ClientSocket.Keys.Contains(strClientID))

{

ClientSocket[strClientID].Close();

ClientSocket.Remove(strClientID);

}

}

public void SendMsgToClient(string Msg)

{

//解析发来的数据

string[] msgTxt = Msg.Split('|');

//不可解析数据

if (msgTxt.Length < 2)

{

return;

}

string strTo = msgTxt[1];

int strToId = Convert.ToInt32(strTo);

Users userTo = new https://www.doczj.com/doc/7312356188.html,ersBLL().SelectById(strToId);

if (ClientSocket.Keys.Contains(userTo.IP))

{

byte[] buffer = System.Text.Encoding.UTF8.GetBytes(Msg);

Socket conn = ClientSocket[userTo.IP];

conn.Send(buffer);

}

}

(客户端)

//与服务器通信的socket

#region sokConnect()负责通信的socket

void sokConnect()

{

//负责通信的socket

try

{

socketSent = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

IPAddress ip = IPAddress.Parse(txtIP.Text.Trim());

socketSent.Connect(ip, Convert.ToInt32(txtProt.Text.Trim()));

// showmsg("连接成功");

//将IP更新回数据库

new https://www.doczj.com/doc/7312356188.html,ersBLL().UpDateIp(nowuser.Id, socketSent.LocalEndPoint.ToString());

// 接收消息,的新线程

Thread th = new Thread(recive);

//后台运行

th.IsBackground = true;

th.Start();

}

catch (Exception)

{

MessageBox.Show("服务器异常");

//this.Close();

}

}

#endregion

//解析服务端发来的消息

#region 服务端发来的消息

///

/// 服务端发来的消息

///

void recive()

{

try

{

while (true)

{

byte[] buffer = new byte[1024 * 1024 * 5];

int r = socketSent.Receive(buffer);

if (r == 0)

{

break;

}

//一般文字消息

if (buffer[0] == 0)

{

//不解析第一位0

string str = Encoding.UTF8.GetString(buffer, 1, r - 1);

string[] msgTxt = str.Split('|');

string strFrom = msgTxt[0];

int strFromId = Convert.ToInt32(strFrom);

Users userfrom = new https://www.doczj.com/doc/7312356188.html,ersBLL().SelectById(strFromId);

//使用FileStream来写入数据

//File.AppendAllText()

string newstr = https://www.doczj.com/doc/7312356188.html, + ":" + msgTxt[2] + " ____[" + DateTime.Now.ToString() + "]" + "\r\n";

if (userfrom.Id==nowfriend.Id)

{

showmsg(newstr);

}

else

{

for (int i=0; i

{

if

(listView.Items[i].Text==https://www.doczj.com/doc/7312356188.html,+"("+nowfriend.Id+")")

{

}

else

{

if (listView.Items[i].Text == https://www.doczj.com/doc/7312356188.html, + "(" + userfrom.Id + ")")

{

listView.Items[i].Text= https://www.doczj.com/doc/7312356188.html, + "(" + userfrom.Id + ")"+"...好友发来消息";

}

}

}

}

using (FileStream fsWrite = new FileStream(path + "\\" + userfrom.Id + ".txt", FileMode.Append, FileAccess.Write))

{

byte[] newbuffer = Encoding.UTF8.GetBytes(newstr);

fsWrite.Write(newbuffer, 0, newbuffer.Length);

}

}

//解析文件

else if (buffer[0] == 1)

{

string str = Encoding.UTF8.GetString(buffer, 1, r - 1);

string[] msgTxt = str.Split('|');

string strFrom = msgTxt[0];

int strFromId = Convert.ToInt32(strFrom);

Users userfrom = new https://www.doczj.com/doc/7312356188.html,ersBLL().SelectById(strFromId);

//使用FileStream来写入数据

//File.AppendAllText()

string newstr = https://www.doczj.com/doc/7312356188.html, + ":" + "发送了一个文件" + " ____[" + DateTime.Now.ToString() + "]" + "\r\n";

if (userfrom.Id == nowfriend.Id)

{

showmsg(newstr);

}

using (FileStream fsWrite = new FileStream(path + "\\" + userfrom.Id + ".txt", FileMode.Append, FileAccess.Write))

{

byte[] newbuffer = Encoding.UTF8.GetBytes(newstr);

fsWrite.Write(newbuffer, 0, newbuffer.Length);

}

if (MessageBox.Show("好友"+https://www.doczj.com/doc/7312356188.html,+"发来一个文件是否接收","收到文件",MessageBoxButtons.YesNo)==DialogResult.Yes)

{

SaveFileDialog sfd = new SaveFileDialog();

sfd.Title = "保存文件";

sfd.Filter = "全部文件|*.*";

sfd.InitialDirectory = @"C:\Users\Administrator\Desktop";

sfd.ShowDialog(this);

using (FileStream fs = new FileStream(sfd.FileName, FileMode.OpenOrCreate, FileAccess.Write))

{

fs.Write(buffer, 1, r - 1);

}

MessageBox.Show("保存成功");

using (FileStream fsWrite = new FileStream(path + "\\" + userfrom.Id + ".txt", FileMode.Append, FileAccess.Write))

{

byte[] newbuffer = Encoding.UTF8.GetBytes("接收成功");

fsWrite.Write(newbuffer, 0, newbuffer.Length);

}

}

else

{

using (FileStream fsWrite = new FileStream(path + "\\" + userfrom.Id + ".txt", FileMode.Append, FileAccess.Write))

{

byte[] newbuffer = Encoding.UTF8.GetBytes("接收不成功");

fsWrite.Write(newbuffer, 0, newbuffer.Length);

}

}

}

//解析抖动

else if (buffer[0] == 2)

{

string str = Encoding.UTF8.GetString(buffer, 1, r - 1);

string[] msgTxt = str.Split('|');

string strFrom = msgTxt[0];

int strFromId = Convert.ToInt32(strFrom);

Users userfrom = new https://www.doczj.com/doc/7312356188.html,ersBLL().SelectById(strFromId);

string newstr = https://www.doczj.com/doc/7312356188.html, + ":" + "震动了一下"+ " ____[" + DateTime.Now.ToString() + "]" + "\r\n";

if (userfrom.Id == nowfriend.Id)

{

showmsg(newstr);

}

for (int i = 0; i < 100; i++)

{

Random rd = new Random();

int x = rd.Next(200, 250);

Random rx = new Random();

int y = rx.Next(200, 250);

this.Location = new Point(x, y);

System.Threading.Thread.Sleep(5);

Application.DoEvents();

}

using (FileStream fsWrite = new FileStream(path + "\\" + userfrom.Id + ".txt", FileMode.Append, FileAccess.Write))

{

byte[] newbuffer = Encoding.UTF8.GetBytes(newstr);

fsWrite.Write(newbuffer, 0, newbuffer.Length);

}

}

}

}

catch

{

}

}

#endregion

//点击发送文字信息

private void btnsent_Click(object sender, EventArgs e)

{

try

{

string newstr = "我" + ":" + textBox4.Text.Trim() + " ____[" + DateTime.Now.ToString() + "]" + "\r\n";

showmsg(newstr);

using (FileStream fsWrite = new FileStream(path + "\\" +nowfriend.Id + ".txt", FileMode.Append, FileAccess.Write))

{

byte[] newbuffer = Encoding.UTF8.GetBytes(newstr);

fsWrite.Write(newbuffer, 0, newbuffer.Length);

}

string str = nowuser.Id +"|"+ nowfriend.Id +"|"+ textBox4.Text.Trim();

byte[] buffer = Encoding.UTF8.GetBytes(str);

List newbufferMsg = new List();

//自定义协议0位

newbufferMsg.Add(0);

newbufferMsg.AddRange(buffer);

byte[] newBuffer = newbufferMsg.ToArray();

socketSent.Send(newBuffer);

textBox4.Text = "";

}

catch { }

}

//点击发送文件

private void toolStripButton3_Click(object sender, EventArgs e)

{

string newstr = "我" + ":" + "文件" + txtpath.Text + " ____[" + DateTime.Now.ToString() + "]" + "\r\n";

showmsg(newstr);

using (FileStream fsWrite = new FileStream(path + "\\" + nowfriend.Id + ".txt", FileMode.Append, FileAccess.Write))

{

byte[] newbuffer = Encoding.UTF8.GetBytes(newstr);

fsWrite.Write(newbuffer, 0, newbuffer.Length);

}

try

{

using (FileStream fs = new FileStream(txtpath.Text, FileMode.OpenOrCreate, FileAccess.Read))

{

string str = nowuser.Id + "|" + nowfriend.Id + "|" + textBox4.Text.Trim();

byte[] buffer0 = Encoding.UTF8.GetBytes(str);

byte[] buffer = new byte[1024 * 1024 * 5];

int r = fs.Read(buffer, 0, buffer.Length);

List list = new List();

//自定义协议位1

list.Add(1);

list.AddRange(buffer0);

list.AddRange(buffer);

byte[] newbuffer = list.ToArray();

socketSent.Send(newbuffer);

}

}

catch { }

}

//点击发送抖动

private void toolStripButton1_Click(object sender, EventArgs e)

{

try

{

string newstr = "我" + ":" + "震动了一下" + " ____[" + DateTime.Now.ToString() + "]" + "\r\n";

showmsg(newstr);

using (FileStream fsWrite = new FileStream(path + "\\" + nowfriend.Id + ".txt", FileMode.Append, FileAccess.Write))

{

byte[] newbuffer = Encoding.UTF8.GetBytes(newstr);

fsWrite.Write(newbuffer, 0, newbuffer.Length);

}

string str = nowuser.Id + "|" + nowfriend.Id + "|";

byte[] buffer = Encoding.UTF8.GetBytes(str);

List newbuffer1 = new List();

//自定义协议位2

newbuffer1.Add(2);

newbuffer1.AddRange(buffer);

byte[] newBuffer = newbuffer1.ToArray();

socketSent.Send(newBuffer);

}

catch { };

}

局域网内的多功能聊天室的设计与实现

JISHOU UNIVERSITY 专业课课程论文题目:局域网内的多功能聊天室的设计与实现 作者: 学号: 所属学院:信息科学与工程学院 专业年级: 总评分: 完成时间: 吉首大学信息科学与工程学院

局域网内的多功能聊天室的设计与实现 局域网内的多功能聊天室的设计与实现 (吉首大学信息科学与工程学院,湖南吉首 416000) 摘要 在计算机技术飞速发展的今天,随着Internet的普及和发展,人们的生活和工作也越来越离不开信息网络的支持,而聊天室是人们最常见、最直接的网上交流的方式。本论文主要研究一个以网络交友为主,为广大用户提供一个借助网络进行人际交往的信息平台。 本文所设计的局域网聊天系统是基于开放的WEB服务器应用程序开发设计的,其主要特征是能动态完成信息的传递且具有高效的交互性,有效的处理客户请求且具有更简单、更方便的数据库访问方法,易于维护和更新。这种技术程序由JAVA、HTML、数据库和脚本语言组合而成。主要功能模块包括:用户登录、注册部分;编写和显示聊天记录部分;管理员管理聊天室的管理部分。聊天系统编写和显示聊天记录部分界面友好,提供动作、表情、公聊或私聊等操作;管理部分可以删除不守规矩的注册用户、踢出在线用户以及删除某些不合时宜的聊天记录等、根据数据库需求分析,在ACCESS中定义3个表:用user表来存放注册用户信息、用activetable 表来存放当前在线用户信息以及用message表来存放聊天记录。本系统相比较其他信息交流平台具有开发方便、快捷,占用资源少,维护方便等优点。 【关键词】Java,数据库,脚本语言,聊天系

LAN of multi-function chat room design and Implementation Raotao (College of Information Science and Engineering,Jishou University,Jishou,Hunan 416000) Abstract The rapid development of computer technology today, with the popularity and development of Internet, people's work and life has become increasingly inseparable from the support of the information network, and the chat room is one of the most common, the most direct online communication mode.In this thesis, a network of friends, for the vast number of users with a network of have the aid of interpersonal information platform. The design of the LAN chat system is based on an open WEB server application development and design, its main characteristic is to complete the information transmission dynamically with high interactivity, effective customer request and has a more simple, more convenient database accessing method, easy maintenance and update.The technical program by JAVA, HTML, database and script language and combination.The main function modules include: user login, registration section; write and display chat recording part; the administrator manage the chat room management section.Chat system to prepare and display chat interface friendly, with action, expression, the public chat or operation; management can remove the unruly registered user, play online user and delete certain be inopportune or inappropriate chat records, according to the database needs analysis, defined in ACCESS 3: user table table for registered users of information, using activetable table to store the current online user information and the use of message table to store the chat record.This system is compared with other information exchange platform with the development of convenient, fast, less resource occupation, easy maintenance and other advantages. Key words:JA V A; data capture; information analysis ; Winpcap;Jpcap

C+++网络聊天室设计报告和源程序

目录 1.需求分析 (2) 2.相关知识............................................... - 3 -2.1W INSOCK介绍 (3) 2.2MFC类CA SYNCSOCKET和CS OCKET (3) 2.3利用CS OCKET进行有连接的通信 (4) 3.详细设计................................... 错误!未定义书签。 3.1客户端的实现 (4) 3.2服务端的实现 (8) 4.程序运行结果.......................................... - 13 -4.1服务器端 .. (13) 4.2客户端 (13) 5.参考文献 ................................................................................................................... 错误!未定义书签。

1.需求分析 当前是数字信息时代,网络时代,任何一种编辑工具都不能忽视在网络上的应用,并且随着Internet 的普及和宽带技术的成熟,越来越多的用户进入网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室。 在网络早期就开始盛行,不论是BBS,IRC 都有类似网上聊天室的机制。聊天室为网友提供了实时性对话的渠道,是网络上极为流行的一项服务。 聊天室适用于网上会议或闲聊的一些场合。聊天室为网友提供了较好的交友环境,网友之间相互以文字交谈,在形式上有点类似笔友的性质,却大大节省了书信往返的时间,这也是网上交友之所以如此热门的原因。 聊天室的设计目标 本课题是建立聊天通信模型,设计一个聊天室软件,包括服务器端和客户端,主要功能为: 服务器端功能: 1、初始化socket, 创建服务器端。 2、维护一个链表,保存所有用户的IP地址、端口信息。 3、接受用户传送来的聊天信息,然后向链表中的所用用户转发。 4、接受用户传送来的连接判断命令,并向用户发出响应命令。 客户端功能: 客户端界面上的两个文本框,一个用于显示接受的聊天信息,一个用来接受用户输入的聊天信息。当按下“发送”按钮时将信息发送给服务器。 通过本课题的毕业设计,可以比较深入的了解和掌握WINSOCK控件基本属性、方法和事件,理解网络聊天通信的概念,输控制协议(TCP)进行数据交流,初步掌握网络聊天通信程序的设计方法。并能巩固和扩展大学期间的学习内容,进行项目的设计开发训练,更好的适应社会的需求。

TCPIP 网络聊天课程设计

《TCP/IP和网络编程》课程设计 题目:网上聊天 姓名 学号 指导教师 二零一零年月日

一、系统功能描述 使用Socket实现网上聊天功能。用户可以通过客户端连接到服务器端并进行网上聊天。当然,聊天时可以启动多个客户端。服务器支持多个主题,进入服务器后可选定主题,启动客户端后,输入服务器的IP地址即可。用户聊天必须处于同一个主题中。 二、系统的模块划分 服务器端: CAboutDlg:生成关于的对话框类 CCChatServerApp:对应用程序进行初始化 CCChatServerDoc、CCChatServerView:一份文档可以有多个相关的视图,当用户在文档上打开一个窗口时,框架创建一个视图并将其与文档连接。 CClientSocket:设置非阻塞,将前台的界面处理和后台的网络通信都整合到消息传递模型。获取输入的用户名,聊天室列表。 CINIFILE:可以读取.修改变量数值,可以设置新的组,新的变量 CMainFrame:创建应用程序主窗口,使之以树菜单保持展开状态 CMyFormView:在程序中应用窗体,可将新窗体插入。 CMyTreeView:将聊天室列表以树形排列,并实现用户发送消息的方法。 CParseMessage:实现信息的传输。 CServerSocket:实现多个客户端的登录。 CSetServerPortDlg:设定连接的端口。 Message:建立一个结构体,设定房间名、用户名、以及发送内容的类型和长度。 客户端: CChatClientApp:实现客户端与服务器端的连接。 ChatClientDoc:从服务器端获取聊天室内房间的名称的文本。 CClientFormView:初始化房间的名称。 CClientLog:显示上次登录的用户名的对话框。 CConnectServerDlg:客户端与服务器端的连接的对话框。 CIniFile:读取当前目录下的ini文件。 CShowMessage:显示其他客户端发送的消息。 CParseMessage:用户登录时的所选择登陆端口,IP,用户名的对话框。 CMyTreeView:客户端上显示的树形列表,以及可实现发送消息头像闪动等。三、调试数据 首先启动服务器端

网络聊天室系统设计与实现

科研训练 网络聊天室系统设计与实现Design and implementation of network chat room system 学生姓名XXX 专业软件工程 学号1305XXXXX 指导教师李XX 祝XX 学院计算机科学技术学院 二〇一六年六月

目录

一、引言 随着网络的大幅度普及,以及网络技术快速发展,人们通过网络进行交流的方式发生着巨大的变化,人们不再拘泥于移动电话的通话模式,越来越多的人通过网络聊天工具进行交流,网络聊天室便是非常典型的聊天工具之一。聊天室系统的即时交流方式满足了网络中人们同时与多人进行聊天交流的需要,使得较多的人在同一个聊天页面进行交流变得方便,简单。 本设计所完成的网络聊天室具有常用聊天室的所有功能,包括使用账号登录聊天室、注册账号、显示在线用户列表、显示系统消息、两人之间进行私密聊天、消息提醒、发送表情、修改发送文字颜色;同时,为了管理聊天室中的用户使用语言的文明,赋予管理员踢出使用不文明语言的用户功能,显示全部聊天信息。该系统采用B/S(浏览器/服务器)结构进行开发,参考网络中正在使用的大型聊天室的架构、分析聊天室可实现功能,结合本次设计的相关要求,进行开发设计并写出需求分析说明书。 该系统具体开发环境:使用专业版作为服务器运行平台,服务器开发语言使用Java语言,前台使用Jsp技术、JavaScript、Jquery语言,系统框架使用 Struts2+Hibernate+Spring框架,后台数据库使用MySql数据库。 二、需求分析 该系统采用B/S模式设计,开发目的主要是提供一个基于网络的安全文明的供多人聊天社交平台。 系统运行环境需求 该系统是在windows 专业版操作系统下,搭建的运行平台,使用myEclipse作为开发工具,mySql作为数据库,Java语言作为系统后台开发语言。 JSP技术作为前台开发语言,其中使用JavaScript以及Jquery作为脚本语言。工程框架使用Struts+Spring+Hibernate框架。 (1)服务器配置: (2)客户端要求配置: 谷歌浏览器、狐火浏览器以及IE浏览器以上版本。 模块功能分析 (一)用户注册登录模块 新用户在使用该聊天室系统时,必须先进行注册新用户操作,后台将注册信息添加到数据库中,用于胡勇登录验证;在注册成功之后再进行登录; 当用户名与密码匹配成功,即可进入聊天室系统。 (二)在线用户显示模块 当用户登录进入系统后,该页面实现在线用户的统计,并将在线用户依次显示出来。如果当前用户属于管理员角色,则在普通用户角色的右边显示“踢下线”链接,如果当前用户属于普通用户角色,则正常显示在线用户名。 (三)用户交流聊天模块 该模块主要负责发送信息内容,选择聊天对象;除此之外,可以修改聊天内容的字体颜色以及发送的表情。发言的颜色和发言的表情通过下拉式组合框实现。发言内容书写完毕后。通过点击“发送”按钮,发送聊天内容。 (四)聊天信息显示模块 当用户选择聊天对象并发送聊天内容后,显示出当前发送的内容以及之前的历史聊天内容,聊天的内容只有对话的两人可见,其他人不可见。当用户退出系统后,再次登录进入聊天室时,两人的对话记录依然存在。

聊天室系统设计报告

青岛科技大学操作系统课程设计 学生班级计算机132班 学生学号1308010204 学生姓名王永远 2016 5 18 ______年 ___月 ___日

目录 设计题目:聊天室系统 (3) 一、设计目的及要求 (3) 1.1设计目的 (3) 1.2设计要求: (3) 二、技术背景 (3) 2.1网络编程 (3) 2.2网络通信 (3) 2.3 Socket (3) 2.4 TCP传输 (4) 2.5 Java的多线程机制 (4) 三、需求分析 (4) 3.1客户端 (4) 3.1.1登录 (4) 3.1.2多人聊天 (4) 3.1.3单人聊天 (5) 3.2服务器端 (5) 四、总体设计 (5) 4.1设计思想流程图 (5) 4.2设计思想分析 (6) 五、详细设计 (6) 5.1客户端设计 (7) 5.1.1登录界面 (7) 5.1.2聊天室界面 (7) 5.1.3单人聊天界面 (7) 5.2服务器端设计 (8) 六、系统测试 (8) 6.1登录测试 (8) 6.1.1用户名为英文字母 (8) 6.1.2用户名为中文 (9) 6.1.3用户名为标点符号 (9) 6.1.4多个用户有重名 (10) 6.1.5服务器地址不合法 (11) 6.1.6端口号不合法 (12) 6.1.7服务器未开启 (12) 6.2群发消息测试 (13) 6.3私聊测试 (15) 6.4用户列表显示测试 (16) 七、心得体会 (16) 八、参考资料 (16) 九、程序清单 (16)

设计题目:聊天室系统 一、设计目的及要求 1.1设计目的 通过该聊天室系统,掌握网络编程的概念及基于网络的C/S模式软件系统开发,掌握基于TCP 协议的Socket编程,掌握Java的多线程机制。 1.2设计要求: 实现多个用户之间类似于QQ的聊天程序,有聊天界面,多用户之间既可以实现群聊,也可以单独聊天。 二、技术背景 2.1网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 2.2网络通信 (1)IP地址:网络中设备的标识,不易记忆,可用主机名 要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机,在TCP/IP协议中,这个标识号就是IP地址。 (2)端口号:用于标识进程的逻辑地址 物理端口网卡口 逻辑端口我们指的就是逻辑端口 A:每个网络程序都会至少有一个逻辑端口 B:用于标识进程的逻辑地址,不同进程的标识 C:有效端口:0~65535,其中0~1024系统使用或保留端口。 (3)传输协议:通信的规则,常见的有UDP,TCP UDP:将数据源和目的封装成数据包中,不需要建立连接;每个数据报的大小在限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快。 TCP:建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低。 2.3 Socket (1)Socket套接字 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。 (2)Socket原理机制 A:通信的两端都有Socket。 B:网络通信其实就是Socket间的通信。 C:数据在两个Socket间通过IO传输。

JAVA聊天室课程设计报告(含源代码压缩文件)

南京晓庄学院 《JAVA程序设计》 课程设计报告 Java聊天室的设计与实现题 目 姓名:戴佳伟 学号:14552019 班级:14软件工程3班 指导教 王峥 师: 完成时间2016.10.7 成绩: 信息工程学院 2016年6月

目录 1引言.............................. . (3) 1.1 java 聊天室开发背景.................................... (3) 1.1java 聊天室开发的目的和意义........ (3) 1.2完成的主要工作.................... (4) 2 需求分析和总体设计................ (5) 2.1 需求分析与设计思路................ (5) 2.1.1 关键技术说明 .................................... . (5) 2.1.2 需求分析..................... ....................... 6 2.1.3 java 聊天室设计方案与思路 (6) 2.1.4 java 聊天室目录结构说明....... (7) 2.2 java 聊天室功能结构 .................................... (8) 3 详细设计.......................... (10) 3.1 java 聊天室模块实现 .................................... (10) 3.1.1 XX 模块实现.................. ..................... 10 4 java 聊天室运行结果.................................... (13) 5课程设计总结...................... .. (15)

网络编程聊天程序课程设计

课题名称:TCP/IP协议及网络编程技术课程设计子课题:实现简化功能的客户机和服务器聊天程序 院(系):计算机学院 专业:通信工程 班级: 学生姓名:hshengxue 学号:200900402022 指导教师:周坚和 2012年 6 月22 日

目录 摘要 (3) 引言 (3) 一、课程设计的目的和意义 (3) 二、课程设计的内容和要求 (3) 三、课程设计所需了解的相关内容和技术 (4) (一)、套接口 (4) (1)套接口的概念 (4) (2)套接口的分类 (5) (3) Socket工作模式 (6) (二)、所用的关键技术 (6) (三)Winsock API的使用 (7) 四、课程设计过程 (7) (一)设计思路 (7) (1)服务器的主要工作流程 (7) (2)客户机的工作流程.............................................8. (3)服务器的工作流程 (8) 五、编程实现 (9) (一)服务器端的实现 (9) (二)客户端的实现 (11) 六、小结 (15) 七、参考文献 (16)

摘要: 网络应用程序是通过网络使用通信协议实现进程间的通信;本项目采用软件工程的方法,综合运用网络程序设计,以visual c++6.0作为系统前台应用程序开发工具。此局域网聊天工具采用客户端/服务端(C/S)模式和UDP连接。它由两个程序组成:服务器(Server)和客户端(Client),首先需要登录服务器,再登录客户端,需要指定服务器IP地址以便与服务器建立连接。登录后,客户可以在自己的界面上与另一指的定的客户端进行聊天。服务器模块主要用来维护网络用户用户的信息,包括用户IP地址,聊天内容;聊天客户端模块主要包括用户连接,发送信息,接收信息。是一套用于Internet网络使用的网络聊天工具,其操作简单,灵活性好,运用也比较稳定。 关键词:网络,聊天程序,客户端/服务端,UDP传输控制协议。 0、引言 网络应用程序是通过网络使用通信协议实现进程间的通信,UDP 是TCP/IP协议族为传输层设计的两个协议之一,UDP提供的是无连接、不可靠的网络传输协议,在进行网络应用程序设计时,TCP/IP 协议的核心内容被封装在操作系统中。网络应用程序要使用UDP协议来实现自己的功能,只能通过由系统提供给用户的UDP协议编程接口来实现。因此,可以说设计网络应用程序就是利用网络编程接口(API)进行程序设计的过程。在Windows环境下的网络应用程序编程接口叫

基于Linux网络聊天室的设计3

基于Linux网络聊天室的设计 摘要本课程设计实现了在linux下简单的网络聊天室。在Linux下编写并调试服务器端程序和客户端程序,实现了客户、服务器之间的连接和通信。可以在单机上开辟两个窗口分别运行客户、服务器端的程序,或者将两台主机连接分别作为客户和服务器的方式。本设计使用网络套接字socket和多线程在网络中的应用,并基于linux下的vi编辑器。本方案经gcc调试器调试成功,可以在单机网络聊天中使用。 关键词网络聊天室;linux ;socket ;vi Abstract Design and Implementation of the course in under linux simple network chat rooms. Prepared in the Linux and debugging server-side processes and client to achieve the client, server and communications link between. Can open up two windows on the stand-alone operation, respectively, customers, server-side procedures, or to connect two hosts, respectively, as the way the client and server. The design of the network socket using the socket and multi-threaded applications in the network, and under linux based vi editor. The program by the success of gcc debug debugger, you can chat in the use of stand-alone network. Key words Network Chat Rooms; Linux; Socket; Vi

java课程设计报告(java聊天室)

Java聊天室课程设计 一、需求分析 1.1开发背景 在信息化社会的今天,网络飞速发展,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似MSN、QQ,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的想法,且通过制作该程序还能更好的学习网络软件编程知识。 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也得到响应的服务。 1.2设计要求 本课程设计的目标是利用套接字socket()设计一个聊天程序,该程序基于C/S模式,客户机器向服务器发聊天请求,服务器应答并能显示客户机发过来的信息。 1.3设计目的 通过设计一个网络聊天程序,对套接字、数据报通讯、URL、与URLConnectiom的相关知识有详细的了解和充分的认识。能将相关的只是运用到相关的实践中去。 1.4功能实现 聊天室共分为客户端和服务端两部分,服务器程序主要负责侦听客户端发来的消息,客户端需要登录到相应的服务器才可以实现正常的聊天功能。 服务器的主要功能有 1)在特定端口上进行侦听,等待客户连接 2)用户可以配置服务器的真挺端口

网络课程设计实验报告--QQ聊天实现

计算机网络课程设计报告 设计选题网络聊天室 姓名马继鸣 学号 0909090630 完成时间 2012-1-12 一、需求分析

聊天工具大多数由客户端程序和服务器程序外加服务器端,本程序采用客户机/服务器架构模式。通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能。用多线程可完成多点对多点的聊天。 主要有两个应用程序,分别为服务器程序和客户端程序。服务器应用程序主要用于消息转发,以及向所有用户发送系统消息等;客户端应用程序主要用于客户聊天记录的显示和信息输入。采用Client/Server(C/S)体系结构,即客户机/服务器体系结构。聊天服务器专门用于监控用户状态和转发消息,客户端负责接收消息的用户序列和消息文本发送到服务器。该聊天系统实现群聊,用户登陆,退出聊天系统等功能。 二. 设计 1.设计思想: 课程设计中利用JAVA实现基于C/S模式的聊天程序。聊天室共分为服 务器端和客户端两部分,服务器端程序主要负责侦听客户发来的消息,客 户端登录到服务器端才可以实现正常的聊天功能。

2.功能设计 (1)服务器端的主要功能如下。 在特定端口上进行侦听,等待客户端连接。用户可以配置服务端的侦听端口,默认端口为10000. 当停止服务时,断开所有用户连接。 (2)客户端的主要功能如下。 连接到已经开启聊天服务的服务端。 当服务器端开启的话,用户可以随时登录与注销。

用户可以向所有人发送消息。 3.详细设计 聊天室服务器端设计 聊天室服务器中主要的功能文件的功能如下: MyButLis.java 主要用于添加事件侦听和动作处理,具体是服务器按钮中的“终止”“发送”的处理。 public class MyButLis implements ActionListener private MyServe server; private JTextField filed1; public void actionPerformed(ActionEvent e) MyChatSet.java 服务器的线程队列,运行的方法,新增一个用户,则增加一个线程,并可以返回应答消息,给其余用户发送上下线信息,发送聊天信息(群聊私聊虽然已写,但是不知为何没有实现),发送用户列表。关键在于除了线程之外,还定义了传输数据时的协议内容,如何分辨不同的信息,如聊天信息,登陆信息,上下线信息,并把信息完整准确的传递。 public static ArrayList servers=new ArrayList();//线程队列 public static void addThread(MyserThread th) //增加一个服务器线程对象 public static void sendReMess(String type,String state,String s,MyserThread myth)//返回应答信息 public static void SendOSMess(String type,String user)//其他用户上下线信息 public static void SendChatMess(String type,String sender,String reciver,String Mess)//聊天信息 public static void SendList//用户列表 MyCheckTool.java 保存用户的登陆信息,在其中建立一个码表,并且可以判断登陆信息是否合法。 //建立码表,用以保存用户信息 private static Map maps=new HashMap(); public static boolean CheckUser(MyUserInfo user)// 验证用户名

毕业设计-聊天室的设计与实现

编号: 毕业论文 题目:聊天室的设计与实现 院(系): 专业:计算机及应用 学生姓名:唐靖琳 学号: 030111301444 指导教师:李志远 职称:教授 题目类型:理论研究实验研究工程设计工程技术研究软件开发 2012年4月15日

随着Internet的普及,很多人已经不满足于仅仅上网冲浪,而希望能参与其中的开发与研究。怎样做好网页便是人们所渴望的事情。想做好一个网页就要选好工具,我的课题是聊天室的设计与制作。因此,我这里选择的开发软件是Macromedia Dreamweaver 8。Macromedia Dreamweaver 8目前作为最主流的ASP开发工具,它可以将前台界面设计和后天程序设计充分结合,包括asp等。而微软的asp和目前推广的https://www.doczj.com/doc/7312356188.html,,是广大网页后台设计师的首选,其应在IIS服务器环境中运行并通过调用ACCESS数据库来实现。 在线聊天室是一种十分普及的动态交互系统,是一种比较直观的且容易接受的交流方式,特别对于刚刚接触的新网民,在线聊天室相对于其他网络交流方式来说有很多不可比拟的优势,比如操作简单,界面简单,信息显示十分直观,十分适合新手;信息的及时传递无延迟,用户可以十分自如地和他人交流而无须等待。这些优点也是聊天室出现这么长时间以来的仍然被广泛使用的原因。至今在线聊天室仍是被很多网站作为吸引网民的利器. 本人制作的是在线聊天室的功能实现,实现用户的登陆和注册,用户在线聊天功能,私聊功能及管理员管理用户功能。聊天的界面有框架构成的。 建设此聊天室,主要目的是为了能够和相同爱好的朋友提供一个实时交流的平台,而不会因为距离而疏远了。 关键词:聊天室;ASP IIS服务器;ACCESS数据库;Macromedia Dreamweaver 8

JAVA课程设计--简单的网络聊天程序

本科课程设计课程设计题目:简单的网络聊天程序

课程设计报告1.设计目的:

序言 1.1 背景 在当今的信息时代,越来越多的聊天工具被应用,Java语言是当今流行的网络编程语言,它具有面向对象、与平台无关、安全、多线程等特点。使用Java语言不仅可以实现大型企业级的分布式应用系统,还能够为小型的、嵌入式设备进行应用程序的开发。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。为了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,锻炼我们熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。 此次课程设计的题目为简单的聊天室,通过做巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用。使我们通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。 1.2 相关技术 CPU:Pentium 2.8GHz以上 内存:256MB以上 硬盘空间:80G以上 操作系统:Windows7 运行环境:eclips

2. 程序设计与实现 2.1需求分析 Java是一种简单的,面向对象的,分布式的,解释的,键壮的,安全的,结构中立的,可移植的,性能很优异的,多线程的,动态的语言。Java去掉了C++语言的许多功能,如:指针运算、结构、typedefs、#define,让Java的语言功能很精炼,并增加了一些很有用的功能,如自动收集碎片。这将减少平常出错的50%。而且,Java很小,整个解释器只需215K的RAM。 因此运用JAVA程序编写聊天室,实现简单聊天功能。本次课程设计做的是Java简单聊天室,它是图形界面、线程、流与文件等技术的综合应用,其界面主要采用了java.awt包,javax.swing包等。程序实现了聊天室的基本功能,其中有: (1)启动服务器:实现网络的连接,为注册进入聊天室做准备。 (2)启动客户端:实现网络的链接,可以进行正式的聊天 (3)发送信息:为用户发送信息提供平台。 (4)离开界面:使用户退出聊天室。 (5)关闭服务器:断开与网络的连接,彻底退出聊天室。

JAVA聊天室系统的设计与实现

目录 第1章绪论- 1 - 1.1论文背景及课题来源 (1) 1.2本课题在国内外的发展状况 (1) 1.3应解决的问题及系统开发意义 (1) 第2章开发工具及相关技术介绍........................................................................................................... - 2 - 2.1J A V A与S OCKET简介 .. (2) 2.2JB UILDER5介绍 (3) 2.3C/S模型介绍 (3) 2.4用J A V A实现S OCKET模型 (4) 2.5J A V A中的线程模型简介 (5) 2.6SQL SERVER2000简介 (5) 第3章系统需求分析............................................................................................................................... - 6 - 3.1系统任务描述. (6) 3.2系统功能分析 (6) 3.2.1 系统的功能需求....................................................................................................................... - 6 - 3.2.2系统数据流图............................................................................................................................ - 7 - 3.2.3系统数据分析............................................................................................................................ - 8 - 3.3系统可行性分析 (9) 第4章系统设计 .................................................................................................................................... - 11 - 4.1系统总体结构设计 (11) 4.2数据库设计 (12) 4.3系统功能模块详细设计 (13) 第5章编码与实现 ................................................................................................................................ - 16 - 5.1系统主要模块代码 (16) 5.1.1启动、停止服务器.................................................................................................................. - 16 - 5.1.2客户端连接服务器.................................................................................................................. - 17 -

聊天室设计报告

网 络 聊 天 系 统 设 计 报 告 组长:靳子豪 组员:凯强、许玉军、王明明 完成时间:2015年11月3日

一、可行性研究报告 可行性研究报告(ISO标准) 编者说明: 在立项时,应该对项目进行综合分析,探讨项目的经济、社会、技术可行性,从而为决策提供基础。该模板为ISO标准文档模板,其不仅适用于软件项目,对于其它的系统项目也适用。 1.引言 1.1 编写目的 该聊天室项目可行性研究报告是对项目课题的全面考虑,是项目分析员对下一步工作进行的前提,是软件开发人员正确成功开发项目的前提与基础。写可行性研究报告可以使软件开发团体尽可能早的估计研究课题的可行性,较早的认识到系统方案的缺陷,可以少花时间和精力,也可减少成本资金,避免专业性的问题。 1.2 背景 a. 待开发系统的名称:信息交流系统 b 用户:大众 c. 它基于web小浏览器的程序系统的设计与开发, 服务平台:appserv-win 开发语言:PHP 数据库:MY SQL 1.3 定义 技术可行性:分析功能,性能以及限制条件,能否是一个技术上可实现的系统 经济可行性:估计开发费用已及最终从开发成功的系统所获得的收入或利益,衡量比较支出的费用和收到的利益 1.4 参考资料 《软件工程导论》(第6版)清华大学海藩牟永敏编著 可行性研究的前提 2.1 要求 a、聊天室功能 用户的聊天功能,包括数据输入、修改、删除,并要达到界面美观又好、使用方便 b、软件的性能 开发该软件应具有的基本要求与功能是实现用户信息数据包括与用户有关的数据 的管理与操作处理,基于MY SQL的数据库的数据管理使该软件有更优异的性能,软件的基本数据流动为用户数据的输入,用户信息及数据的输出。 c、输出 用户基本信息和聊天容 d、输入 用户根据自身需要,发起聊天 e、安全方面的要求 设置管理员 2.2 目标 该软件的设计目标必须尽量达到人力与设备费用的节省,软件的整个设计过程必须通过生产能力的提高、人员工作效率的提高等等使软件开发成本最小化。 2.3 条件、假定和限制 a、本聊天室建议使用寿命为5-10年 b、法律方面的限制:(1)、严禁危害国家信息安全(2)、严禁损害国家荣誉和利益(3)、严禁传播不良信息(5)、严禁抄袭 2.4 进行可行性研究的方法 成本效益分析、对估算问题的看法、软件的作用围、软件的成本估算、速度安排

网络聊天室的实现计算机操作系统课程设计

实验报告 | | 实验名称网络聊天室的实现 课程名称计算机操作系统 | | 目录 【1】设计原理———————————————————————4 【2】程序流程图——————————————————————9 【3】设计步骤———————————————————————10 【4】使用方法说明—————————————————————21 【5】实验结果及分析————————————————————24 设计原理 计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、移动的Fetion等,都是做的比较成功的实时聊天工具。随着网络的日益普及,各种聊天工具也层出不穷,接下来的课程设计就是针对一个简单的网络聊天程序,利用MFC为开发工具,实现基本的通讯功能。 此程序主要分为两部分:服务器端和客户端。服务器端用于提供一个网络端口,等待客户端发出请求,登录到此服务端,然后进行网络通讯和消息的转发;客户端可通过服务器端的IP地址发送连接请求,然后登陆聊天室。在服务器端的成员列表栏中会显示在线的所有人名单,有人退出聊天室,成员列表会自动除名。服务器端同时也提供了成员之间的私聊功能,此时服务器端作为一个转发站,进行消息的转发。整个程序的主体使用了CSocket 类的方法,实现了网络通讯聊天。 整个程序设计为两个部分:服务器(ChatServer)和客户端(Chat)

多人聊天的关键在于要将每个客户端发送过来的消息分发给所有其他客户端,为了解决这个问题,在服务器程序中建立一个套接口链表,用来保存所有与客户端建立了连接的服务端口。下面描述了多人聊天的实现原理: 当客户端Client N向对应的服务端口N发送了消息Message,服务端口N将Message 复制给所有套接口列表(USERLIST)中的套接口缓冲区,然后向每个服务端口发送WRITE 消息,使每个服务端口将Message发送给对应的客户端。这样,所有客户端就都获得了Message消息,实现了多人聊天功能。 BOOL CClientSocketList::Sends(char *buff,int n) {CClientSocket *curr=Head; while (curr) {curr->Send(buff,n); curr=curr->Next;} return true;} USERLIST表时多人聊天程序的核心,它是一个动态变化的链表,为空表示没有客户端建立了连接,不为空时每个元素就代表有一个客户端与服务器建立了连接。 以下程序是私聊功能的实现: BOOL CClientSocketList::OnlySend(char *buff,int n,int who) { CClientSocket *curr=Head; while (curr && who>0) {curr=curr->Next; who--;} curr->Send(buff,n); return true;} 以下是此程序的效果截图:

相关主题
文本预览
相关文档 最新文档