最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx

上传人:b****2 文档编号:11734764 上传时间:2023-06-02 格式:DOCX 页数:24 大小:144.71KB
下载 相关 举报
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第1页
第1页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第2页
第2页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第3页
第3页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第4页
第4页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第5页
第5页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第6页
第6页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第7页
第7页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第8页
第8页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第9页
第9页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第10页
第10页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第11页
第11页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第12页
第12页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第13页
第13页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第14页
第14页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第15页
第15页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第16页
第16页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第17页
第17页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第18页
第18页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第19页
第19页 / 共24页
最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx

《最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx》由会员分享,可在线阅读,更多相关《最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx(24页珍藏版)》请在冰点文库上搜索。

最新毕业设计论文单线程的简单qq聊天系统毕业设计.docx

最新毕业设计论文单线程的简单qq聊天系统毕业设计

9.函数INT(数值表达式)的功能是________。

5.?

?

?

?

?

?

?

?

?

?

?

命令原来做逻辑删除,?

?

?

?

?

?

?

?

?

?

?

命令用来做物理删除。

settalkoff

C.RENAMEVIEWD.DELETEVIEW

三、简答题(共30分)

12.ROUND(337.2007,3)的结果是________。

22、既可应用于局域网又可应用于广域网的以太网技术是

13.软件是指______。

C.可以修改表中某些列的属性D.可以修改表中某些列的内容

A.一个类包含了相似的有关对象的特征和行为方法

苏州高博软件技术职业学院

毕业设计(论文)报告

 

系别软件工程系

专业软件开发

班级0801

姓名张蕾蕾

学号008320102

设计题目单线程的简单QQ聊天系统

指导教师陈勇

起迄日期2010.12.02-2011.1.09

 

苏州高博软件技术职业学院

毕业设计诚信承诺书

本人慎重承诺和声明:

我承诺在毕业设计过程中严格遵守学校有关规定,在指导教师的安排与指导下完成所规定的毕业设计工作,绝不弄虚作假,不请别人代做毕业设计或抄袭别人的成果。

所撰写的毕业论文或毕业设计是在指导老师的指导下自主完成,文中所有引文或引用数据、图表均注明来源,本人愿意为由此引起的后果承担责任。

学生签名:

张蕾蕾日期:

2010年12月02日

 

毕业设计知识产权权属声明

本人在老师指导下所完成的论文及设计成果、知识产权归属学校。

学校享有以任何方式发表、复制、公开阅览、借阅以及申请专利等权利。

学生签名:

张蕾蕾日期:

2010年12月02日

指导教师签名:

日期:

年月日

 

单线程的简单QQ聊天系统

摘要

目前网络通讯是计算机用户进行交流最普遍的方式,各种各样基于网络的应用也随之诞生,比如“腾讯QQ”——一款基于Internet的即时通信(IM)软件,它使人们能随时在网上与其他用户交换消息,为网络用户提供一个即时交流聊天的平台。

但是一般来讲QQ聊天系统是多线程的,因此会涉及到阻塞的问题,如果是单线程的话,线程阻塞在accept方法上时整个进程就不能处理其他事件。

本文采用timer控件和socket类中的poll方法相结合的方法进行设计,使用单线程实现了聊天系统,并且不会出现进程阻塞,实质上是采用轮询和查询状态的方式避免了阻塞。

本文的设计是在VisualC#2008语言下实现并通过了初步的测试,证明设计是有效的。

关键词timer控件;套接字Socket;单线程

 

 

1第1章绪论

1.1引言

随着互联网应用越来越丰富,以快速、交互、简便为代表的即时通讯工具,已经成为当前网络用户最喜爱的网络沟通工具。

作为即时通讯工具最具增长潜力之一的聊天软件,不仅在基础应用方面,还是产品扩展应用方面都将有质的飞跃,极大程度上方便了处于在世界各地的友人之间的相互联系。

特别是在近几年,即时通讯工具已经成为一个集互动交流、休闲娱乐、信息管理为一体的多元化互联网应用平台。

总之,聊天软件的出现给人们彼此之间的沟通带来了无比的方便,人们可以通过聊天软件建立深刻的友情,它必定会成为人们网络生活不可缺少的一部分。

1.1.1编写目的

综合运用计算机网络应用编程中的TCP网络通信协议以及Socket套接字等知识,以VisualC#作为开发平台,编写一个单线程聊天程序。

本程序需要在一台计算机上运行服务器端程序,然后就可以在同一网络的另外一台计算机上运行客户端程序,登录到服务器上,从而实现服务器与用户之间的即时聊天、发送图片等功能。

1.1.2背景

◆项目名称:

简单的单线程QQ聊天系统

◆项目用户:

苏州高博软件技术学院3108宿舍

◆开发者:

张蕾蕾

1.2课题意义

一直以来,空间上的距离都是人们彼此相互交流的最大障碍。

以前人们的信息交流是通过电话、信件、电报等手段,由于功能的局限给收发双方带来了很多不便。

所以更加即时的直观的使人们能在网上识别在线用户并与他们实时交换消息的即时通信技术应运而生,它是电子邮件发明以来迅速崛起的在线通讯方式,为网络用户提供一个实时交流聊天的平台。

而且即时通信和社会化网络、统一通信、在线协同三大技术热点的关系将越来越密切,已经构成融合发展的趋势,因此即时通信技术的应用将越来越广泛,越来越普遍。

1.3研究现状

即时消息系统是一种在后PC时代兴起的,以Internet网络为基础的,允许交互双方即时地传送文字、语音、视频等信息,能够跟踪网络用户在线状态的网络应用软件,它的出现改变了人们的沟通方式和交友文化,大大拓展了个人生活交流的空间。

 

2第2章系统分析概述

2.1可行性研究

2.1.1技术可行性

随着互联网应用越来越丰富,以快速、交互、简便为代表的即时通讯工具,已经成为当前网络用户最喜爱的网络沟通工具。

本系统是一个使用套接字Socket编程,采用其中的TCP面向连接方式的简单的聊天工具,具有很强的实用价值。

2.1.2经济可行性

开发本系统能够使人们之间的交流带来极大的方便,而且所用的人力、物力、技术、资金等的花费不大,所以今后获得的经济效益一定会大于开发成本。

2.1.3操作可行性

本开发系统操作步骤简单,运行时只要在登录时输入服务器信息以及自己的昵称就可以进入聊天程序,然后就可以与服务器进行信息交流。

2.2系统分析

2.2.1功能要求

ⅰ.客户端登录时输入的服务器信息必须与服务端一致。

ⅱ.用户与服务器之间的信息发送,是本程序需要实现的最基本的功能。

ⅲ.在C/S模式中,服务器和客户端是相互依赖的。

服务器启动以后,客户端才能连接上服务器,如果服务器没有启动,那么用户和服务器不能连接而且客户端或服务器任意一方断开连接,对方都会能接收到通知消息。

 

2.2.2设计流程图

 

1第3章总体设计

3.1体系结构设计

通常的通信工具,都采用客户机/服务器(C/S)体系结构,C/S结构包括一个客户端和一个服务器。

在Internet通信中,使用TCP面向连接的套接字来建立服务器端和客户端两个IP地址端点之间的会话。

一旦建立了这种连接,就可以在设备之间可靠地传输数据。

如下图所示:

服务器

客户端

3.2功能简介

本聊天程序提供了服务器与客户端的一对一连接,客户端必须在服务器启动以后才能连接成功。

用户登录以后聊天室的客户端会显示用户已登录和在线时间,还可以与服务器进行即时聊天等。

3.2.1服务器端总体设计

对于服务器端程序,首先建立的套接字Socket必须用Bind方法绑定到Tcp通信的本地IP地址和端口上,当套接字绑定到本地,使用Listen方法等待客户机发出的连接尝试,接着服务器使用Accept方法为接收任何引进连接做准备,在接受客户端连接之后,客户端和服务器通过Receive方法和Send方法传输数据。

3.2.2客户端总体设计

对于客户端程序,客户机通过Connect方法把一个地址绑定到创建的Socket对象,一旦客户端与服务器建立连接,客户机就可以像服务器收发数据使用的方法一样,使用Send和Receive方法进行通信。

3.3系统特点

Ø界面设计美观友好。

Ø规范、完整的基础信息设置。

Ø能够即时进行通信聊天。

Ø系统运行稳定、安全可靠。

第4章详细设计

4.1系统的开发工具

4.1.1开发环境--MicrosoftVisualStudio2008

VisualStudio是微软公司出品的一款大型应用软件,是一套完整的开发工具集,它主要用于生成ASP.NETWeb应用程序、XMLWebServices、桌面应用程序和移动应用程序。

4.1.2C#程序语言

C#是微软为.NETFramework量身订做的程序语言,它拥有C/C++的强大功能以及VisualBasic简易使用的特性,是第一个组件导向的程序语言,和C++与Java一样亦为对象导向(object-oriented)程序语言。

4.2服务器模块设计

4.2.1服务器登录模块

登录模块界面

服务器进入登录界面(如图4-2-1)后,设置IP地址和端口号,点击“登录”按钮,系统将验证输入的服务器信息是否合法,如果服务器信息合法则跳转到聊天室,否则将弹出错误提示窗口(如图4-2-2)。

如果未设置服务器信息,则弹出信息提示窗口(如图4-2-3);点击“重置”按钮,服务器信息将被清空。

 

图4-2-1服务器登录界面

图4-2-2错误提示窗口

图4-2-3信息提示窗口

登录模块代码

privatevoidbtnLog_Click(objectsender,EventArgse)

{

if(txtIP.Text==""||txtPort.Text=="")

{

MessageBox.Show("请输入IP地址或端口号!

","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Warning,MessageBoxDefaultButton.Button1);

return;

}

else

{

try

{

IPAddressipadd=IPAddress.Parse(this.txtIP.Text);

intport=Convert.ToInt32(this.txtPort.Text);

this.Text="服务器"+DateTime.Now.ToString()+""+DateTime.Now.DayOfWeek.ToString();

richTextBox1.AppendText("System:

服务器已进入聊天室!

<-"+DateTime.Now.ToLongTimeString()+"->.....\r\n");

stringSerIp=txtIP.Text.ToString();

stringSerPort=txtPort.Text.ToString();

labip.Text="IP地址:

"+""+SerIp+"";

labport.Text="端口号:

"+""+SerPort;

}

catch(Exception)

{

MessageBox.Show("您输入的IP地址或端口号不正确,\n请重新输入!

","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);

}

}

}

4.2.2服务器聊天模块

聊天模块界面

服务器进入聊天室后,状态栏显示服务器登录时输入的IP地址和端口号。

点击“启动”按钮,服务器开始监听,如果有用户连接上来,服务器可以与用户进行聊天(如图4-2-4)。

另外聊天室的工具栏还有一些辅助按钮,如“背景颜色”按钮(如图4-2-5);“隐藏窗口”按钮,隐藏聊天程序、“帮助”按钮(如图4-2-6)、“关于”按钮(如图4-2-7)。

图4-2-4服务器聊天界面

图4-2-5设置背景颜色

图4-2-6关于对话框

聊天模块代码

图4-2-7帮助对话框

privatevoidbtn_start_Click(objectsender,EventArgse)

{

try

{

IPAddressip=IPAddress.Parse(this.txtIP.Text);

IPEndPointmyEndPoint=newIPEndPoint(ip,Int32.Parse(this.txtPort.Text));

serTcpSocket=newTcpListener(myEndPoint);

serTcpSocket.Start(3);

this.Text="服务器Taking....";

richTextBox1.Clear();

richTextBox1.AppendText("System:

服务器已启动!

<-"+DateTime.Now.ToLongTimeString()+"->.....\r\n");

btn_start.Enabled=false;

btn_stop.Enabled=true;

timerAccept.Enabled=true;

timerReceive.Enabled=true;

}

catch(Exceptionex)

{

MessageBox.Show("您输入的IP地址或端口号不正确,\n请重新输入!

","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);

return;

}

}

privatevoidbtn_send_Click(objectsender,EventArgse)

{

intindex=comboBoxClientIP.SelectedIndex;

if(comboBoxClientIP.SelectedIndex==-1)

{

MessageBox.Show("您未选择发送端","为空",MessageBoxButtons.OK,MessageBoxIcon.Warning,MessageBoxDefaultButton.Button1);

return;

}

try

{

if(txt1_sendinfo.Text=="")

{

MessageBox.Show("您输入的消息为空","为空",MessageBoxButtons.OK,MessageBoxIcon.Warning,MessageBoxDefaultButton.Button1);

return;

}

else

{

stringstr=Dns.GetHostName()+":

"+richTextBox1.Text+"\n";

sendBuffer=System.Text.Encoding.UTF8.GetBytes(str);

((User)conArrayList[index]).conNetworkStream.Write(sendBuffer,0,sendBuffer.Length);

richTextBox1.SelectionColor=Color.SteelBlue;

richTextBox1.AppendText(str+'\n');

txt1_sendinfo.Clear();

}

}

catch(Exceptionex)

{

MessageBox.Show("发送失败!

","系统提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning);

}

}

privatevoidtimerAccept_Tick(objectsender,EventArgse)

{

if(serTcpSocket.Pending())

{

TcpClientconTcpSocket;

conTcpSocket=serTcpSocket.AcceptTcpClient();

UseroneUser=newUser(conTcpSocket);//添加对象

conArrayList.Add(oneUser);//添加对象

richTextBox1.AppendText("System:

已有用户"+conTcpSocket.Client.RemoteEndPoint+"连上.....\r\n");

}

catch(Exceptionex)

{

MessageBox.Show("服务器:

"+ex.Message);

this.btn_start.Enabled=true;

}

}

privatevoidtimerReceive_Tick(objectsender,EventArgse)

{

for(inti=0;i

{

if(((User)conArrayList[i]).conTcpSocket.Client.Poll(10,SelectMode.SelectRead))

{

intcount=0;

if(((User)conArrayList[i]).conNetworkStream.DataAvailable)

{

count=((User)conArrayList[i]).conNetworkStream.Read(recBuffer,0,recBuffer.Length);

strings=System.Text.Encoding.UTF8.GetString(recBuffer,0,count);

richTextBox1.AppendText(s+'\n');

}

else

{

richTextBox1.AppendText(((User)conArrayList[i]).conTcpSocket.Client.RemoteEndPoint+"已断开");

((User)conArrayList[i]).conTcpSocket.Client.Close();

((User)conArrayList[i]).conTcpSocket.Close();

((User)conArrayList[i]).conNetworkStream.Close();

conArrayList.RemoveAt(i);

comboBoxClientIP.Items.RemoveAt(i);

comboBoxClientIP.Text="请选择客户端";

}

}

}

}

4.3客户端模块设计

4.3.1客户端登录模块

登录模块界面

客户端进入登录界面(如图4-3-1),输入服务器IP地址和端口号以及自己的昵称,点击“登录”按钮,系统将验证输入的服务器信息是否合法,如果合法则跳转到聊天室,否则弹出错误对话框(如图4-3-2)。

如果未输入服务器信息则弹出提示提示(如图4-3-3).;如果未输入昵称则弹出提示信息提示(如图4-3-4)。

图4-3-1服务器登录界面

图4-3-2提示服务器信息不合法

图4-3-3提示输入服务器信息

图4-3-4提示输入昵称

客户端登录模块代码

privatevoidbtnLog_Click(objectsender,EventArgse)

{

if(txt_IP.Text==""||txt_Port.Text=="")

{

MessageBox.Show("服务器信息不能为空!

","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Warning,MessageBoxDefaultButton.Button1);

return;

}

else

{

try

{

IPAddressipadd=IPAddress.Parse(this.txt_IP.Text);

intport=Convert.ToInt32(this.txt_Port.Text);

tab1.Visible=false;

tab2.Visible=true;

this.btnImgFile.Enabled=false;

this.Text="客户端"+DateTime.Now.ToString()+""+DateTime.Now.DayOfWeek.ToString();

richTextBox1.AppendText("System:

"+"客户端已进入聊天室!

<-"+DateTime.Now.ToLongTimeString()+"->.....\r\n");

stringSerIp=txt_IP.Text.ToString();

stringSerPort=txt_Port.Text.ToString();

lbSerIp.Text="IP地址:

"+""+SerIp+"";

lbSerPort.Text="端口号:

"+""+SerPort;

}

catch(Exceptionerr)

{

MessageBox.Show("您输入的服务器信息不合法,\n请重新输入!

","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);

}

}

4.3.2客户端聊天模块

聊天模块界面

用户进入聊天室后,状态栏显示服务器信息和昵称。

点击“连接”按钮,如果服务器已启动,用户连接上聊天室并与服务器进行聊天(如图4-3-5)。

另外聊天室的工具栏还有一些辅助按钮,如“背景颜色”按钮(如图4-3-6);“隐藏窗口”按钮;“帮助”按钮(如图4-3-7);“关于”按钮(如图4-3-8)。

图4-3-5客户端聊天界面

图4-3-6设置背景颜色

图4-3-8帮助对话框

图4-3-7关于对话框

聊天室模块代码

privatevoidbtn_req_Click(objectsender,EventArgse)

{

try

{

cliTcpClient=newTcpClient();

IPAddressip=IPAddress.Parse(this.txt_IP.Text);

myEndPoint=newIPEndPoint(ip,Int32.Parse(this.txt_Port.Text));

this.Text=""+"客户端Taking....";

richTextBox1.Clear();

richTextBox1.AppendText("System:

客户端连接到服务器!

<-"+DateTime.Now.ToLongTimeString()+"->.....\r\n");

btn_req.Enabled=false;

btn_close.Enabled=true;

timerConnect.Enabled=true;

}

catch

{

richTextBox1.Clear();

richTextBox1.AppendText("System:

客户端未连接上服务器!

<-"+DateTime.Now.ToLongTimeString()+"->.....\r\n");

return;

}

}

priva

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2