聊天工具.docx

上传人:b****8 文档编号:29458234 上传时间:2023-07-23 格式:DOCX 页数:20 大小:535.73KB
下载 相关 举报
聊天工具.docx_第1页
第1页 / 共20页
聊天工具.docx_第2页
第2页 / 共20页
聊天工具.docx_第3页
第3页 / 共20页
聊天工具.docx_第4页
第4页 / 共20页
聊天工具.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

聊天工具.docx

《聊天工具.docx》由会员分享,可在线阅读,更多相关《聊天工具.docx(20页珍藏版)》请在冰豆网上搜索。

聊天工具.docx

聊天工具

网络课程设计报告

班级

姓名

学号

指导教师

1、课题要求及目标

1.1基本要求

(1)课题要求

聊天服务器支持四个聊天主题,在服务器启动时选定主题。

相应主题的服务器启动后,可以从启动聊天客户端。

在客户端与服务器建立起连接之前,需要指定聊天的名称,登录到的服务器名称(或起IP地址)及参加聊天的主题。

连接建立起来后,从服务器或者任何一个客户端,都可以见到所有客户曾经说过的话,并且可以将它们保存下来。

(2)开发技术

Internet上的通讯协议是TCP/IP,Internet上数据传输协议主要有TCP和UDP,TCP是有连接协议,它要求计算机进行对话时必须先建立连接,保证数据传送安全到达目的地。

UDP是无连接协议,它只是将信息送到网络上,并不检查数据是否到达了目的地。

要进行实时会话,则应该采用TCP协议。

所以本组程序采用TCP协议来实现局域网的聊天系统。

VB企业版提供了Winsock控件,要实现两台计算机的对话,可以通过Winsock控件进行。

我们用Winsocket的listen()方法来监听、close()方法来关闭连接、Accpet()方法来接受连接、getdata()方法来从接收缓冲区中读取数据、senddata()方法来向远程节点发送数据。

而用ConnectionRequest()事件处理节点请求与服务器程序连接、DataArrival()事件处理数据通过活动连接到达、Error()事件处理发生的错误。

(3)程序开发环境和开发语言

本组采用的编程环境是vb6.0企业版。

VB企业版提供了Winsock控件,要实现两台计算机的对话(也可是一台机器),可以通过Winsock控件进行。

而不需了解更多的数据传输细节,本程序就是通过Winsock进行的。

Winsock有多种属性、方法和事件,如listen()、Accpet()、ConnectionRequest()、DataArrival()等等···

1.2开发目标

随着信息时代的到来,人们日常接触的机会减少,转而通过网络的虚拟接触增加。

为了便于沟通,我们设计了这款可供多人同时聊天的软件。

软件的程序分服务器端和客户端两部分。

客户端程序启动后首先与服务器连接,即输入正确的服务器IP地址和服务器的端口号、输入一个名字,点击“连接”即可连接成功,进入客户端的聊天界面。

客户端可以保存聊天内容。

客户端可以播放本机保存的音乐;服务端程序则负责支持与每一个客户的连接和数据交换,并且记录下所有聊天内容,聊天人数,上线、下线的人员姓名和时间。

服务器可以保存聊天内容,并打开保存好的聊天记录。

如果服务器程序关闭,则所有客户程序自动关闭。

2、系统总体设计

2.1模块划分

程序分服务器端和客户端程序两部分

服务器端功能描述如下:

显示本机一些信息(服务器ip地址、服务器端口号(已设定)、本机名、日期、时间)、(最上侧、右下角)

显示是否有人登陆人数、(左下角)

记录上线人姓名/昵称、上线时间及下线时间

显示聊天记录、

保存聊天记录/打开存好的聊天记录、

清除当前服务器的聊天内容、

有数据传送时窗体闪烁、

发送信息、

客户端功能描述如下:

多客户同时连接服务器端,显示上线及下线信息

显示聊天内容

保存聊天记录

清除当前聊天内容

发送信息

播放本机所存音乐

2.2系统结构,开发系统的运行结构或实现技术的结构。

说明系统各功能或模块之间的关系。

本系统分为服务器与客户机俩部分。

服务器开始启动,等待连接请求。

客户端若想连接,

触发connect方法来请求连接,服务器则触发ConnectionRequest()事件进行处理。

连接以后若有数据传输,则触发DataArrival()事件来进行处理,用getdata方法来接受数据。

若有数据要发送则senddata方法来发送信息,客户端则触发DataArrival()事件来进行处理。

若有断开连接请求,则触发Close()事件来处理远程节点关闭连接。

3、服务器模块的设计与实现

3.1引言

(1)编写目的:

服务器启动后,可以接受客户端的连接请求,负责维护与每一个客户的连接和数据交换,并且记录下所有聊天内容,及人员名单。

记录上线与下线时间。

服务器可以保存聊天内容,及打开保存好的聊天内容。

如果服务器程序关闭,则所有客户程序自动关闭。

(2)背景:

 

本局域网聊天系统服务器是本小组开发的一个小型聊天系统之一,是网络应用与编程课程设计的作业。

本次课程设计主要是用winsocket来编写实现网络之间的连接与传送数据。

本服务器主要实现与客户机连接与传送数据。

(3)定义:

 

socket:

socket是为支持TCP/IP协议而开发的,socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。

应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

两个程序之间的通信方法。

Socket是一种识别码,应用程式可用此唯一识别通信端点。

用户创建Socket地址与Socket的关联性后,便可创建通信协议地址与Socket的关联性。

(4)设计思想:

写出每个人的程序的开发思想和方法,具体的实现技术。

3.2程序系统的结构

Winsocket控件的几个属性、方法与事件:

Index‘属性控件在控件组中的位置

LocalHostName‘属性返回本地机器名

LocalIP‘属性返回本地机器IP地址

LocalPort‘属性返回或指定端口

Name‘属性标识控件实例

Protocol‘属性控件使用的协议(TCP或UCP)

RemoteHost‘属性设置或返回远程机器名

RemoteHostIP‘属性设置或返回远程机器IP地址

RemotePort‘属性设置或返回远程机器的端口号

State‘属性返回当前socket的连接状态

Accept()‘方法接受连接请求

Close()‘方法关闭连接

Connect()‘方法请求与远程计算机连接

GetData()‘方法从接收缓冲区读取数据

Listen()‘方法侦听连接请求

SendData()‘方法向远程节点发送数据

Close()‘事件远程节点关闭连接时发生

Connect()‘事件连接建立时发生

ConnectionRequest()‘事件节点请求与服务器程序连接时发生

DataArrival()‘事件数据通过活动连接到达时发生

Error()‘事件发生错误时发生

3.3“函数”级说明

1.winsocket的基本设置:

一个Winsock控件可以建立与一个计算机的联接,服务器程序中首先设置一个Winsock控件,将其索引值设为0,以便在运行时动态增减元素,这样可以与多个计算机进行对话。

服务器程序启动时,先设置自己的本地端口,因为有些端口有其固定的作用,这里是2000,IP地址选项设为动态获得本机IP地址,提取当前时间、日期,显示上线人数。

与本地绑定,开始监听。

实现程序如下:

PrivateSubForm_Load()

Dimls_portAsInteger

wsk(0).Protocol=0/使用TCP协议

wsk(0).LocalPort=2000/端口值设为2000

Label2.Caption=CStr(wsk(0).LocalIP)

Label4.Caption=CStr(wsk(0).LocalPort)

Label6.Caption=CStr(wsk(0).LocalHostName)

Label8.Caption="nowtherearenobodyconnected!

"

ls_port=Label4.Caption

wsk(0).LocalPort=ls_port

wsk(0).Bind/与本地绑定

wsk(0).Listen/开始监听

Timer2.Enabled=False

Timer2.Interval=500'闪烁间隔时间

EndSub

PrivateSubTimer1_Timer()

Me.Label9.Caption=":

"&Format(Now,"yyyy-mmm-ddhh:

mm:

ss")

EndSub

图3.3.1基本设置流程图

2.连接请求处理:

sckServer_ConnectionRequest过程处理连接请求,当远程计算机要求连接时,服务器首先检查用户自定义数组中是否有空闲位置(因为在谈话中途,肯定会有人退出,所以会产生空闲位置),如果有则选择空闲位置给予要求连接的客户,否则将数组维数加一,将之给予请求连接的远程节点。

实现程序如下:

PrivateSubwsk_ConnectionRequest(IndexAsInteger,ByValrequestIDAsLong)

IfIndex=0Then

Num=Num+1

NumOnline=NumOnline+1

Loadwsk(Num)

Label8.Caption="Thereare"&NumOnline&"Clientconnected"

wsk(Num).LocalPort=0

wsk(Num).AcceptrequestID

EndIf

EndSub

图3.3.2连接请求处理流程图

3.传送数据处理:

sckServer_DataArrival过程处理客户端传来的数据。

当有数据发送过来后,服务器首先用getdata方法来接收数据。

Winsock控件将数据首先送至缓冲区,待缓冲区满才发送信息。

实现程序如下:

PrivateSubwsk_DataArrival(IndexAsInteger,ByValbytesTotalAsLong)

DimsDataAsString

DimsNameAsString

Timer2.Enabled=True

'允许闪烁

wsk(Index).GetDatasData

rtb.SelStart=Len(rtb.Text)

sName=Left(sData,1)

IfsName="/"Then

List1.AddItemsData+CStr(Now())

wsk(Index).SendData"≈≈≈≈≈≈≈≈≈≈≈≈欢迎加入聊天室≈≈≈≈≈≈≈≈≈≈≈≈"+vbCrLf

ElseIfsName="^"Then

wsk(Index).SendData"youcanquit."

List1.AddItemsData+CStr(Now())

wsk(Index).Close

NumOnline=NumOnline-1

Label8.Caption="Thereare"&NumOnline&"Clientconnected"

rtb.SelStart=Len(rtb.Text)

rtb.Text=rtb.Text+sData

EndIf

rtb.SelStart=Len(rtb.Text)

rtb.Text=rtb.Text+"("+CStr(Now())+")"+sData+vbCrLf

EndSub

图3.3.3传送数据处理流程图

4.发送数据处理:

用keycode=13来发送信息,服务器检测连接状态的客户机并把信息发给每个连接状态的客户机。

实现程序如下:

PrivateSubt_KeyUp(KeyCodeAsInteger,ShiftAsInteger)

IfKeyCode=13Then

Fori=1ToNum

Ifwsk(i).State=sckClosedThen

ExitFor

Else

wsk(i).SendData"server:

"&t.Text+vbCrLf

EndIf

Nexti

rtb.SelStart=Len(rtb.Text)

rtb.Text=rtb.Text+"[server]"+"("+CStr(Now())+")"+":

"+t.Text+vbCrLf

t.Text=""

EndIf

EndSub

图3.3.4发送数据处理流程图

5.日志保存与打开:

用CommonDialog控件的保存CommonDialog1.ShowSave方法与打开CommonDialog1.FileName方法来实现聊天内容的保存与打开。

PrivateSubopen_Click()

Loadjopen

jopen.rtbopen.LoadFile(CommonDialog1.FileName)

jopen.rtbopen.Visible=True

jopen.Show

EndSub

PrivateSubsav_Click()

CommonDialog1.ShowSave

rtb.SaveFile(CommonDialog1.FileName)

EndSub

图3.3.5保存/打开日志流程图

6.断开连接处理:

服务器检测所有在连接状态的客户机并关闭服务器。

实现程序如下:

PrivateSubunload_Click()

Fori=1ToNum

wsk(i).Close

Nexti

EndSub

图3.3.6断开连接处理流程图

7.闪烁效果:

开始timer2控件的enabled是假,当有数据从客户端传来时Timer2.Enabled=True,这时窗体会闪烁。

实现程序如下:

PrivateSubForm_Activate()

aab=GetActiveWindow()

'得到该窗口的句柄(一定要在activate事件或其后调用,否则获得的句柄无效)

EndSub

PrivateSubTimer2_Timer()

DimlRtnAsLong

'每执行一次便闪烁一次

lRtn=FlashWindow(aab,CLng(True))

EndSub

DimaabAsLong'此变量用于存取窗口的句柄

PrivateDeclareFunctionGetActiveWindow_

Lib"user32"()AsLong'获取活动窗口的句柄

PrivateDeclareFunctionFlashWindow_

Lib"user32"(_

ByValhwndAsLong,_

ByValbInvertAsLong_

)AsLong

图3.3.7闪烁效果流程图

4、总结

4.1运行效果

图4-1“服务器运行”效果

图4-2“有客户上线”效果

图4-3客户端传过来的数据

图4-4保存日志效果

图4-5打开日志效果

图4-6退出效果

4.2测试结果与分析

图4-7服务器与客户端连接成功

本局域网聊天系统的服务器与客户端是通过服务器端本机的IP地址与设定的端口号来进行连接的,如果客户端不知道服务器本机ip或端口号,就无法进行连接。

如果链接成功则返回信息、及显示相关信息。

进行聊天。

4.3开发心得

我是本开发小组的组长,我们这学期开始学计算机网络这门课,开始不是很了解网络内层的一些问题。

这次课程设计我们选了网络聊天系统,刚开始我选这个题目是因为感觉上比别的题目简单,可能是天天接触者QQ的原因吧,但是开始着手去做的时候才发现并不好做,通过这几周的努力,上网查资料、看书、看别人的成品等等….终于完成了我自己的任务,我的服务器出来了。

通过这次的课设我发现原来网络内层是挺复杂的,连接啊、数据啊、传送啊等等….

这次我跟我的组员配合很有默契,她做客户端,我们各自做完拿过来放到一起,一连接就连接上了。

参考文献

[9787561124741]谢希仁.计算机网络.大连理工大学出版社.2008年1月

[9787302135630]吕伟臣.visualbasic例子.清华大学出版社.2006年6月

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1