搜档网
当前位置:搜档网 › 局域网聊天程序(类飞鸽)综合设计

局域网聊天程序(类飞鸽)综合设计

局域网聊天程序(类飞鸽)综合设计
局域网聊天程序(类飞鸽)综合设计

基于Socks局域网内即时通讯软件(类飞鸽)

摘要

网络通讯在当今已经不算新鲜事物,但大多数网络通讯都需要借助Internet 上的服务器,这就给那些具有大规模内部网络的用户造成了许多问题,如浪费网络资源、遭遇到网络攻击、传播的病毒、破坏防御系统等等。由于互连网上的网络通讯工具给企业内部信息交流带来了不便,所以为了方便内部网络的用户之间的沟通,需要开发一个基于局域网的信息收发系统的即时通讯工具,实现在内部网络中进行信息的交流。本课题设计主要针对局域网通讯而开发设计的,采用的是C/S 构架,类似飞鸽传书系统,来实现聊天、文件传输功能,并借助一些网络

通讯组件,成功的实现了在局域网上的即时通讯。

本论文的目标是设计一个类似飞鸽传输的局域网通信软件,并分析它在其领域的优势。本设计以 C 编写,能在windows xp 等环境下运行。设计共分为几大模块,分别是:

首先,介绍选题设计内容和目标;

其次,介绍需求分析和设计思想(TCP/IP 点对点协议技术,C/S 架构和SOCKET 网络编程技术);

然后,设计的具体实现;

最后,对工作计划统计以及分析系统进行测试并得到测试结果和附录。

关键词:聊天;文件传输;socket;类飞鸽传书;C/S 结构

一、设计内容

1.1 课题背景

当时间走向21 世纪,当今时代也由工业经济渐渐成为了知识经济、信息经济的时代。信息的需求量的不停增加,促使了计算机通信的日新月异!虽然网络的使用频率与使用的范围都越来越广泛,但是人们使用的网络的用途主要的还是只有两个:

(1).相互之间的沟通,

(2).资源共享。局域网作为网络的一个重要组成部分,它不但用户与外界连接的枢纽,同时也是近距离用户之间沟通与资源共享的一个重要途径。在这种情况下,如何使局域网内的用户便捷的勾通,以及快速的资源共享,也就成为了人们对网络研究的重点之一。

本系统仿飞鸽传输,是一个局域网内的通迅工具,主要通过Winsockt 完成。它据有的功能有:

(1)局域网内用户间简单的文字聊天功能;

(2)局域网内用户间相互的文件、文件夹传输。

1.2 本课题主要研究背景

随着计算机和通讯技术的发展,计算机的网络化已经渗透到各个应用领域,尤其是以TCP/IP 协议之间的网络互连发展很快,计算机应用系统的开发由传统的单机方式转向到了网络环境的开发。大部分编程语言都提供了基于Windows Sockets 网络编程接口的Win socket 控件,它使开发TCP/IP 通讯变得简单方便。网络之间进行数据通讯时,使用地址来标识网络中的计算机,有了地址以后,数据才会准确地发送到地址所指向的计算机。TCP/IP 协议使用IP 地址为网络中计算机的标识,而且每台计算机的IP 地址是唯一的,一般情况下,每台计算机运行的程序不止一个,因此要在应用程序中建立连接的话,还需要一个地址标识。在TCP/IP 协议书中使用端口(PORT)作为计算机上运行的应用程序的标识,因此TCP/IP 协议中一个有效的网络地址包括IP 地址和端口地址两个部分。TCP/IP 协议提供了两种计算机之间的通讯方式:TCP 方式和UDP 方式。

TCP 是一种面向连接的服务,在文件传输时会先行建立连接,通过链接提供双向、有序且无重复的数据流服务、以及流量控制、差错检测和纠错等服务,从而确保文件传输的正确性;UDP 则是一种无连接的服务,它在传输文件时不会确保传输端的文件能够正确无误的传送到接收端,所以当使用UDP 时,通常要自己作接收确认的工作。

1.3 本课题主要研究思路和方法

本系统的开发采用基于win socket 的广播发送模式,进行文字聊天和文件、文件夹传输的设计与开发。因此,本设计首先分析该系统的相关功能,结合本设计的相关要求写出需求分析;其次,综合运用以前所学的相关知识,选择所熟悉的开发工具进行本设计的开发;在设计中以需求分析为基础,写出系统开发计划、实现流程及相关问题的实现方法;最后,在系统开发完毕后,进行调试和运行,做好调试和运行的相关记录。

1.4 研究项目的目的以及意义

随着互联网技术的迅猛发展,网络给人们带来了很多便利,比如人们借助于网络进行相互交流变得更加方便。聊天工具作为互联网中运用最为广泛的通信工

具之一,如今都已被广大网民接受。很多人都使用过飞鸽传书软件,飞鸽传书发展到现在已经具有了很多功能:有文字聊天、文件、文件夹传输的基本功能,也有密封、加锁等较为复杂的功能。本毕业设计的目的主要是为了检查使学生综合运用以前所学知识(包括以前所学的一些关于网络、编程、信息安全等知识)的能力,模拟局域网飞鸽传书软件,开发一个天系统软件,本毕业设计主要实现局域网内文字聊天及文件传输等功能。

1.5 Win Socket 的寻址方式

因为Winsock 要兼容多个协议,所以必须使用通用的寻址方式。TCP/IP 使用地址和端口号来指定一个地址,但是其它协议也许采用不同的形式。如果Winsock 强迫使用特定的寻址方式,添加其他协议就不大可能了。在Winsock 中应用程序员通过SOCKADDR_IN 结构来指定IP 地址和端口号。定义如下:

Struct sockaddr_in{

short sin_family;

u_short sin_port;

struct in_addr sin_addr;

har sin_zero[8];

};

应用程序可以使用inet_addr 函数将一个小数点分隔的十进制IP 地址字符串转化成由32 位二进制数表示的IP 地址。inet_ntoa 函数将一个网络字节顺序的32 位IP 地址转化字符串。注意:inet_addr 返回的32 位二进制数是用网络顺序存储的

1.6本次程序设计组成员及分工

张天国

沈敏

杨欣

二、设计目标

根据对飞鸽传输系统的调研,我认为本设计需要满足以下几个系统设计目标:

(1)实用性原则:真正为局域网的实际工作服务,按照需求的轻重缓急,合理设计本系统。

(2)可靠性原则:必须为用户提供安全的服务,尤其是要保证传输的稳定性。

(3)友好性原则:使用本系统的用户相当一部分对计算机知识了解很少,所

以系统操作上要求简单方便,便于用户掌握。

(4)可扩展性原则:采用开放的标准和接口,便于系统向更大的规模和功能扩展。

三、需求分析

3.1 系统设计目标和可行性分析

3.1.1系统设计目标

根据对飞鸽传输系统的调研,我认为本设计需要满足以下几个系统设计目标:

(1)实用性原则:真正为局域网的实际工作服务,按照需求的轻重缓急,合理设计本系统。

(2)可靠性原则:必须为用户提供安全的服务,尤其是要保证传输的稳定性。

(3)友好性原则:使用本系统的用户相当一部分对计算机知识了解很少,所以系统操作上要求简单方便,便于用户掌握。

(4)可扩展性原则:采用开放的标准和接口,便于系统向更大的规模和功能扩展。

3.1.2可行性分析

1)技术可行性:本系统以Visual C++为主要编程环境,再结合网络通信基本原理和Socket编程及语音处理API技术,技术成熟,可行。

2)经济可行性:这个系统开发开发成较低,经济效益会远大于开发成本,可行。

3)操作可行性:系统硬件为PC机,软件为Windows Xp,而且编程环境Visual C++为专业程序员使用工具,比较易于使用,可行。

3.2 系统总体需求分析

根据用户需求,本系统分为两个子系统:1:局域网内简单文字聊天子系统,它是在局域网内选择相应的用户,以便对之发送文字信息,2:文件、文件夹传输系统,它是在先把需要传输的文件、文件夹转换成相就的数据流传关,到了目的主机再由之还原。本系统的文字聊天系统实现的功能类似于QQ用户之间的聊天。在设计系统时,应根据简洁、流畅的特点安排布局,在编制程序时应充分考虑这一点传输的稳定、快捷,真正做到"简洁、高效、流畅、安全"的使用环境。用户使用的过程为,先是用户登开启本软件,软件自动检索局域网的其它用户,并以之成为用户列表,让用户选择。当用户发现所要连接的用户之后,双击该用户,则出现发送窗口。用户用之来发送消息或者文件。接收方可以选择接收或者拒绝相应的传输文件。

3.3 组织结构的分析

以下为组织结构图:

3.4开发运行环境

开发此系统所需的基本软、硬件环境为:

(1).WindowsXP 或

win7;

(2).Pentium100 及以上档次的 PC 及其兼容机;

(3).128M

以上内存措施;

(4).1G 以上可用硬盘空间;

(5).VGA 显示器; 以上的配置均要求为在同一局域网内的两台或两台以上。

3.5 系统开发语言

本系统采用 VC/VC++

语言开发。VC/VC++

是前些年迅速发展和推广的一种计算机语言,

近年来,已经相当的完善。

它主要特点有两个方面:一是全面兼容 C ,二是支持面向对向的方法。.

3.5.1 理论知识

3.5.1.1 C/S 软件架构技术

C/S (Client/Server )结构,即大家熟知的客户机/服务器结构。它是软件 系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到 Client 端和 Server 端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是 Client/Server 形式的两层结构,由于现在的软件应用系统正在向分布式的 Web 应用发展,Web 和 Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的

应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前 应用系统的发展方向。

传统的 C /S 体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是 Client 端还是 Server 端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S 结构的软件需要针对不同的操作系 统系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。

3.5.1.2 用户数据报协议(UDP)

UDP (User Datagram Protocol ):用户数据包协议,它和 TCP 一样位于传

输层,和 IP 协议配合使用,在传输数据时省去包头,但它不能提供数据包的重传,所以适合传输较短的文件。

由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的地机器上的软件程序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。这是通过使用 UDP 的"端口号"完成的。源端口号标识了请求域名服务的本地机的应用程序,同时需要将所有由目的站生成的响应包都指定到源主机的这个端口上。与 TCP 不同,UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于 UDP 比较简单,UDP 头包含很少的字节,比 TCP 负载消耗少,所以 UDP 适用于不需要 TCP 可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候。UDP 是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)。

3.5.1.3 单播、广播、组播浅析

硬件组播(multicasting)是一种多点投递的形式,它使用硬件技术,通过使用大量组播地址来通信。当某一组机器需要通信时,选择一个组播地址,并配置好相应的网络接口硬件,识别组播地址,从而收到该组播地址上分组的拷贝。

广播(broadcasting)是多点投递的最普遍的形式,它向每一个目的站投递一个分组的拷贝。它可以通过多个单次分组的投递完成,也可以通过单独的连接传递分组的拷贝,直到每个接收方均收到一个拷贝为止。在多数网络中,用户是通过把分组分送给一个特殊保留的地址即广播地址(broadcast address)来进行广播投递,它的主要缺点是会耗费大量的主机资源和网络资源。

单播(unexacting)是指只有一个目的地的数据报传递。从投递目的地的数量而言,单播和广播均可看作是组播的一个子集。单播可以看作仅包括一台机器群组的组播;广播可以看作包含了所有机器群组的组播。但从数据报的投递方式而言,单播、广播和组播还是有较大的区别。

3.6 Visual C++ 中的MFC

Visual C++是一个功能强大的可视化应用程序开发工具,用于Windows环境下32位的应用程序的开发,是计算机界公认的最优秀的应用开发工具之一。在提供可视化的编程方式的同时,Visual C++也适用于编写直接对系统底层操作的程序,生成代码的质量也优于其它的开发工具。在Visual C++环境下,利用Microsoft的基本类库MFC(Microsoft Foundation Class Library),可以使用完全的面向对象的方法来进行Windows 95/98/NT应用程序的开发,使得Windows 程序员从大量的复杂劳动中解救出来,体会到真正的程序语言的强大功能和良好的灵活性。

Visual C++编程是一个面向对象的程序设计方法。同传统的结构化程序设计方法相比,它缩短软件的研制时间,提高软件的开发效率,使程序员可以更好地理解和管理庞大而复杂的程序。

面向对象的程序设计吸取了结构化程序设计的精华,它利用了人们根据对事物分类和抽象的倾向,引入了类和对象的概念,具有封装性(数据抽象)、继承和多态的特点。与结构化程序设计不同的是,面向对象程序设计是用类抽象代表现实的实体,用类之间的继承关系表示程序设计的抽象过程。函数只是对数据的操作,没有数据的概念,而类是数据和数据操作的集合,由于面向对象的程序设计方法

非常近现实,所以越来越流行。

Visual C++中集成了大量的最新技术,如ActiveX、COM等技术,程序开发人员可以紧紧地把握住软件开发技术发展的方向,开发出功能强大的应用程序。Visual C++还提供了丰富的技术资源,MSDN(Microsoft Develop Network)提供了强大的联机帮助支持,同时还可以通过访问Microsoft的网上站点来获得最新的技术文档。

(1) Socket及Window Socket API简介

套接字(Socket)是一种双向的通信接口,可以通过这个端口与任何一个具有Socket端口的计算机通信,套接字是网络通信的基础。Socket在Windows以句柄的形式被创建。使用Socket进行网络通信必须包含下面的几种信息:双方认可的协议,本地主机的IP地址,本地进程的协议端口,对方主机的IP地址,对方进程的协议端口。

Socket可分为: 1] 数据报套接字(Datagram Sockets)——对于在TCP/IP 上实现的WinSock,数据报套接字使用用户数据报协议(UDP)。数据报套接字提供了一种不可靠的、非连接的数据包通信方式。 2] 流式套接字(Stream Sockets)——流式套接字使用传输控制协议(TCP)。流式套接字可以将数据按顺序无重复地发送到目的地,它提供的是一种可靠的、面向连接的数据传输方式。不管是对单个的数据报,还是对数据包,流式套接字都提供了一种流式数据传输。(1.1)Socket

套接字(Socket)是一种双向的通信接口,可以通过这个端口与任何一个具有Socket端口的计算机通信,套接字是网络通信的基础。Socket在Windows以句柄的形式被创建。使用Socket进行网络通信必须包含下面的几种信息:双方认可的协议,本地主机的IP地址,本地进程的协议端口,对方主机的IP地址,对方进程的协议端口。

Socket可分为: 1] 数据报套接字(Datagram Sockets)——对于在TCP/IP 上实现的WinSock,数据报套接字使用用户数据报协议(UDP)。数据报套接字提供了一种不可靠的、非连接的数据包通信方式。 2] 流式套接字(Stream Sockets)——流式套接字使用传输控制协议(TCP)。流式套接字可以将数据按顺序无重复地发送到目的地,它提供的是一种可靠的、面向连接的数据传输方式。不管是对单个的数据报,还是对数据包,流式套接字都提供了一种流式数据传输。MFC Socket程序编程的步骤:

1:加载套接字库,创建套接字(AsfSocket()/socket());

2:绑定套接字到一个IP地址和一个端口上(bind());

3:将套接字设置为监听模式等待连接请求(listen());

4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());

5:用返回的套接字和客户端进行通信(send()/recv());

6:返回,等待另一连接请求;

7:关闭套接字,关闭加载的套接字库(closesocket())。

(1.2)socket函数

socket的创建函数,其定义为:SOCKET PASCAL FAR socket (int af, int type, int protocol)

第一个参数为int af,代表网络地址族,目前只有一种取值是有效的,即AF_INET,代表internet地址族;

第二个参数为int type,代表网络协议类型,SOCK_DGRAM代表UDP协议,SOCK_STREAM代表TCP协议;

第三个参数为int protocol,指定网络地址族的特殊协议,目前无用,赋值0即可。

返回值为SOCKET,若返回INVALID_SOCKET则失败。

(1.3)sockaddr_in、in_addr类型,inet_addr、inet_ntoa函数

sockaddr_in定义了socket发送和接收数据包的地址

sockaddr_in的含义比in_addr的含义要广泛,其各个字段的含义和取值如下第一个字段short sin_family,代表网络地址族,如前所述,只能取值AF_INET;第二个字段u_short sin_port,代表IP地址端口,由程序员指定;

第三个字段struct in_addr sin_addr,代表IP地址;

第四个字段char sin_zero[8],很搞笑,是为了保证sockaddr_in与SOCKADDR类型的长度相等而填充进来的字段。

(1.4)常用的WinSock函数

VC++对网络编程的支持有socket支持,Winlnet支持,MAPI和ISAPI支持等。其中Windows Sockets API是TCP/IP网络环境里,也是Internet上进行开发最为通用的API。最早美国加州大学Berkeley分校在UNIX下为TCP/IP协议开发了一个API,这个API就是著名的Berkeley Socket接口(套接字)。在桌面操作系统进入Windows时代后,仍然继承了Socket方法。从表一可以看出,主要的WinSock API函数有哪些。

(2) MFC Socket编程技术

MFC是对API的封装,MFC针对WinSock API封装了两个类:CAsyncSocket 和Csocket。因此,使用这两个类进行Socket网络程序的编写会比使用API方便一些。

MFC中Socket相关类的继承关系如下图:

[图1] MFC中Socket相关类的继承关系

CAsyncSocket对WinSock API进行了较低程度的封装,缺省情况下建立的Socket是异步操作方式,即非阻塞的,因此一些阻塞操作,需要自己动手完成。另外,由于它对API的封装程度不高,以前在WinSock API中需要自己完成的工作(比如:字节顺序的转换),仍然需要自己完成。当然有许多程序员喜欢使用该类甚至WinSock API,原因是这些方法具有很大的灵活性,给程序员以较大的发挥空间。为了给程序员提供更方便的接口以自动处理网络通信中的一些任务,MFC在CAsycnSocket类的基础上派生了CSocket类,它提供了比CAsyncSocket 更高层的WinSock API接口。CSocket的网络操作是同步方式,即阻塞式的。CSocket建立的Socket不是阻塞的,而是对非阻塞的Socket进行处理后实现的阻塞操作。在阻塞任务执行过程中,Windows线程的消息循环仍然有效,也就是说CSocket类的阻塞操作不影响Windows的消息循环。

四、设计思想

本系统的开发采用基于 win socket 的广播发送模式,进行文字聊天和文件传输的设计与开发。因此,本次设计的思想有以下几个方面:第一,分析该系统的相关功能,结合本设计的相关要求写出需求分析;

需求分析的基本任务是准确的回答“系统必须做什么?”这个问题。这一阶段是对系统认识最为全面、准确、清晰、得体的一个比较关键的时期。而且需求分析的结果是系统开发的基础,关系到工程的成败和软件产品的质量。因此,必须用行之有效的方法对软件需求进行严格的审查验证,为下一步的总体设计打好基础。

本次设计着重于文字聊天和文件传输功能的实现。在局域网中在线用户之间的信息交流。对于聊天功能的实现可以使基于点到点的,也就是说,在两个用户之间的文字传输,可以把每一在线用户设成一个类,实际是对这个类的操作,在具体实现中可以在一个对话框中(类似qq聊天的窗口)具有文字信息的接收与传输;也可以是基于多播的形式(类似qq群的功能),在一个群组里的成员都可与接收到某一用户发在群组里的信息。对于文件传输功能的实现,是在与目标用户建立连接后把数据转换成socket流进行传输。

第二,综合运用以前所学的相关知识,选择所熟悉的开发工具进行本设计的开发;在设计中以需求分析为基础,写出系统开发计划、实现流程及相关问题的实现方法;

在具体实现中有以下几个重要问题,需要解决:

首先,邻居发现机制的实现。如何使局域网的在线用户刷新在显示本地在线用户列表上。()

其次,文本消息的发送与接收。如何利用socket实现文本信息的发送与接收。

然后,文件的发送与接收。

第三,在系统开发完毕后,进行调试和运行,做好调试和运行的相关记录。

4.1聊天模块的整体构架

本系统文字聊天是采用 C/S 结构,所以每个客户端也是作为服务器端的,

当系统发送信息给局域网的用户,主要由单播模块和广播模块来实现,而其中的 单播模块和用户信息模块是具有依赖性的,在接收信息的时候又有两个模块来完 成,一是信息接收的模块,另一个是信息查看的模块。

由此可以看出本模块主要分为两模块:发送模块和接收模块。发送模块:单 播模块,广播模块,用户信息模块,信息记录模块接收模块:接收信息模块,查看信息模块

综上所述,系统的架构图为:

4.2 文件传输模块的主要流程图

由于本模块采用 C/S 架构故将系统运行载体分为两个部分:客户端与服务器端。文件传输需要建立有效的连接后,通过 TCP/IP 协议实现点对点的文件传输。通信双方是通过三次握手建立连接,实现文字、文件传输,最后关闭套节字连接。

其传输的整个流程图如下:

五、具体实现

5.1聊天的主登录界面

由于系统的用户设计是针对的用户日常活动,而非专门从事计算机操作的人员,所以本系统力求界面友好、简单,以便给用户提供一个舒适的使用环境。在文字聊天模块的主要目标是简捷,方便。为了方便用户选取单个用户进行信息发送和查看在线用户的信息,所以设计了一个在线用户列表来进行显示如下图,在在线用户列表中包括了用户名组、在线用户群组等。

5.1.1 单个用户之间的文字聊天

当有用户打开本系统的时候将会向局域网中的所有用户发送一个握手信息来获取网络中的在线用户信息并添加到列表中显示出来,同时也把自己的网络资源信息发送给对方,使自己被添加到其他用户的列表中。

登录界面,如图所示:

登录界面

启动主界面进行发送的,在发送时将会把信息发送给在局域网内部的所有用户包括自己。选择用户并输入发送信息,单播发送的如下图所示,主要是通过Id UDP Server 和Id UDP Client 组件来编写的,由client. Send Buffer 语句来发送的,主要是对局域网内部的同一工作组用户发送信息。

与单个用户进行通信:

其中主要的代码为:

void CNETMsgDlg::OnFlUSH()

{

// TODO: Add your control notification handler code here

this->mainMsg.BroadCastEntry(); //发送广播数据包

}

void CMsg::BroadCastEntry()//广播发送获取在线用户信息

{

CString brdEntry = _T("");

CUserInfor usInfor = locUserInfor ;

CPacketHead pkHead ;

CNETMsgDlg *pMsgDlg = (CNETMsgDlg *) pMainWnd;

pkHead.SetCmd(MSG_BR_ENTRY);

pkHead.SetTime(CGeneralTool::GetSystemTime());

brdEntry = pkHead.GetPacketHeadData();

brdEntry.Format("%s%c%s",brdEntry,MSG_DATAPK_SPLIT,usInfor.GetUserInforDa ta());

#ifdef _DEGUG_OUTPUTMSG_

::MessageBox(NULL,brdEntry,"CMsg::BroadCastEntry",NULL);

#endif

SendBrdPacket(brdEntry.GetBuffer(brdEntry.GetLength()),brdEntry.GetLength(),p ort);

brdEntry.ReleaseBuffer();

brdEntry = _T("");

pkHead = this->locPacketHead;

pkHead.SetCmd(MSG_BR_ENTRY);

brdEntry.Format("%s%c%s",pkHead.GetPacketHeadData(),MSG_DATAPK_SPLIT,lo cUserInfor.GetUserInforData()) ;

for(int i = 0 ; i < pMsgDlg->settingConf.ipNum ; i++)

{

this->SendMsg(brdEntry.GetBuffer( brdEntry.GetLength()),brdEntry.GetLength(),pMsg Dlg->settingConf.szIp[i].GetBuffer(pMsgDlg->settingConf.szIp[i].GetLength() ),port);

brdEntry.ReleaseBuffer();

}

}

void CNETSendMsg::OnBtSendmsg() //发送信息

{

// TODO: Add your control notification handler code here

CNETMsgDlg *dlg = (CNETMsgDlg *)m_pParent;

CPacketHead pkHd ;

CString str = _T("") ,str1 = _T("") , str2 = _T("") ,strSend = _T("");

m_cInputMsg.GetWindowText(str1);//获取输入的文本信息

if( str1.IsEmpty())

{

::MessageBox(this->GetSafeHwnd(),"发送信息不能为空!","提示",NULL);

return ;

}

str2 = "\n" + locUser.GetDspUserInfor(dlg->settingConf) + "\n" + str1 + "";

m_cInputMsg.SetWindowText(_T(""));

m_cOutputMsg.GetWindowText(str);

m_cOutputMsg.SetWindowText(str + str2);

m_cOutputMsg.PostMessage(WM_VSCROLL, SB_BOTTOM,0);//附加一些必要的信息并发送

pkHd = dlg->mainMsg.locPacketHead ;

pkHd.SetTime(CGeneralTool::GetSystemTime());

pkHd.SetCmd(MSG_SENDDATA | IPMSG_ONE_TO_ONE); //命令字选项,一对一交流

strSend.Format("%s%c%s",pkHd.GetPacketHeadData(),MSG_DATAPK_SPLIT,str1);

this->sendBuff = strSend;

m_pParent->PostMessage(WM_DIALOG,ID_SENDMSG, dlgId);

}

5.1.2 一对多的通信或是多对多的通信

广播发送通过用户群组实现(如下图),主要是通过UDP Server 和UDP Client 组件来编写的,主要是使用了Broadcast 来对信息,如图所示:

(在线用户群组)

首先在进行广播发送信息时要进入广播组,即这里的在线用户群组,通过广播地址实现进入广播组。

用户群组的显示列表主代码:

void CNETMsgDlg::OnButtonQun() //用户群组的显示列表

{

// TODO: Add your control notification handler code here

if( m_list == 2 )

return ;

m_list = 2 ;

CRect rect , rectBtUseronline , rectBtQun,rectUserist ,rectQunlist ,rectFlush ;

GetClientRect(&rect);

rectBtUseronline.CopyRect(rect);

rectBtUseronline.top += WH_ELAPSE ;

rectBtUseronline.left += WH_ELAPSE;

rectBtUseronline.bottom = rectBtUseronline.top + WH_BUTTON_HEIGHT ;

rectBtUseronline.right -= WH_ELAPSE ;

this->m_bt_OnlineUser.MoveWindow( rectBtUseronline );

rectBtQun.CopyRect(rect);

rectBtQun.top = rectBtQun.top + WH_ELAPSE + WH_BUTTON_HEIGHT + WH_ELAPSE ;

rectBtQun.bottom = rectBtQun.top + WH_BUTTON_HEIGHT ;

rectBtQun.left += WH_ELAPSE;

rectBtQun.right -= WH_ELAPSE ;

this->m_bt_qun.MoveWindow( rectBtQun );

this->m_cListUser.ShowWindow( SW_HIDE); //隐藏用户列表

rectQunlist.CopyRect(rect); //显示群列表

rectQunlist.top = rectQunlist.top + WH_ELAPSE + WH_BUTTON_HEIGHT + WH_ELAPSE + WH_BUTTON_HEIGHT + WH_ELAPSE;

rectQunlist.left += WH_ELAPSE;

rectQunlist.bottom = rectQunlist.bottom - 30 - WH_ELAPSE; //减去刷新按钮的高度,间隙,群按钮的高度

rectQunlist.right -= WH_ELAPSE;

this->m_cListQun.MoveWindow(rectQunlist);

this->m_cListQun.ShowWindow( SW_SHOW );

this->m_bt_flush.MoveWindow((rect.right - 120)/2,rect.bottom - 27 , 120,24);//刷新实现用户组的更新

}

用户群组的信息发送界面:

如下图:

用户群组的信息发送:

void CNETGroupDlg::OnButtonSend() //发送群信息

{

// TODO: Add your control notification handler code here

CNETMsgDlg *dlg = (CNETMsgDlg *)m_pParent;

CGroupInfor gpInf ;

CUsersInfor usInf ;

CUserInfor us ;

CPacketHead pkHd ;

CString str = _T("") ,str1 = _T("") , str2 = _T("") ,strSend = _T("");

CString ip = _T("");

this->m_input.GetWindowText(str1);

str1.TrimLeft();

str1.TrimRight();

if( str1.IsEmpty())

{

::MessageBox(this->GetSafeHwnd(),"发送信息不能为空!","提示",NULL);

return ;

}

str2 = "\n" + dlg->mainMsg.locUserInfor.GetDspUserInfor(dlg->settingConf) + "\n" + str1 + "";

m_input.SetWindowText(_T(""));

//m_output.GetWindowText(str);

//m_output.SetWindowText(str + str2);

//m_output.PostMessage(WM_VSCROLL, SB_BOTTOM,0); //用不着回显,在群的发送列表里已经有自己的IP了

pkHd = dlg->mainMsg.locPacketHead ;

pkHd.SetTime(CGeneralTool::GetSystemTime());

pkHd.SetCmd(MSG_SENDDATA|IPMSG_ONE_TO_MORE); //命令字符加信息,IPMSG_ONE_TO_MORE表示是群消息

strSend.Format("%s%c%s",pkHd.GetPacketHeadData(),MSG_DATAPK_SPLIT,str1);

if( dlg->mainMsg.groupsInfor.getUsersByGroupname(this->groupName ,gpInf) < 0)

return ;

usInf = gpInf.getUsersInfor();

for(int j = 0 ;j < usInf.GetUserNum() ;j++)

{

if( usInf.GetUserByIndex(j ,us) < 0)

continue;

ip = us.GetHostIp();

dlg->mainMsg.SendMsg( strSend.GetBuffer(strSend.GetLength() ), strSend.GetLength() ,ip.GetBuffer(ip.GetLength()),dlg->mainMsg.port);

}

}

5.3文件传输的实现

与文字聊天一样,系统的文件、文件夹传输模块也尽量地要求简单易行,便于操作。当然,作为文件的传输,速度和安全也就成为了重要的问题,要能达到局域网较为单一的环境要求。

文件传输的过程中流程为首先客端的主机通过TCP/IP 协议建立链接,然后客户机发送套节字请求,通过 3 次握手连接响应,再转换数据为socket 流传送最近通过 3 次握手断开连接响应。

选择用户并单击文件按钮把相应所要传送的文件选中,完成选择即可传输。如图所示:

选择某个在线用户:

点击文件按钮:

选择要传送的文件,完成。

对方单击“是(Y)”,即可接收文件。

具体实现代码:

void CNETSendMsg::OnClose()

{

// TODO: Add your message handler code here and/or call default

CString str ,str1;

CNETMsgDlg *dlg = (CNETMsgDlg *)m_pParent;

if(fileStatus != 0)

{

if( fileStatus == 3)

{

str.Format("关闭窗口将中断文件‘%s’的发送,是否关闭?",sendFileInf.GetFileName() );

if( MessageBox(str,"文件", MB_YESNO|MB_ICONQUESTION) == IDYES)

{

dlg->mainMsg.MsgFileSend(destUser,MSG_FILE_BREAKSEND,sendFileInf);

fileStatus = 0;

}

else

return ;

}

if( fileStatus == 4)

{

str.Format("关闭窗口将中断文件‘%s’的接收,是否关闭?",RecvFileInf.GetFileName() );

if( MessageBox(str,"文件", MB_YESNO|MB_ICONQUESTION) == IDYES)

{

dlg->mainMsg.MsgFileSend(destUser,MSG_FILE_BREAKRECV,RecvFileInf);

fileStatus = 0;

}

else

return ;

}

}

六、附录

CDlgGroup 群组函数

CDlgSet 对话框设置

CFileInfor 文件信息

CGroupInfor 群组信息

NETSendMsg 信息发送主函数

NETGroupDlg 群组实现

NETMsg 文字发送

SetConfig 附加信息设置

RichEditExCtrl 编辑框

UserInfor 用户信息

UsersInfor 用户组信息

ListCtrlEx 列表信息

FileInfor 文件信息

七、参考文献

[1] Andrew S.Tanenbaum.计算机网络[M].北京:清华大学出版社,1998。

[2] Anonymous.网络最高安全技术指南[M].北京:机械工业出版社,1998。

[3] David A.Solomon.Windows NT 技术内幕[M].北京:清华大学出版社,1999。

[4] Douglas https://www.sodocs.net/doc/7413347200.html,er.TCP/IP 网络互连技术[M].北京:清华大学出版社,1998。

[5] David J.Kruglinski.Visual C++ 技术内幕[M].北京:清华大学出版社,1999。

[6]梁普选.Visual C++ 序设计与实践.北京:清华大学出版社,2005。

[7]百度文库。https://www.sodocs.net/doc/7413347200.html,

[8]孙鑫MFC教学视频

[9]csdn在线文库https://www.sodocs.net/doc/7413347200.html,

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

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

局域网聊天系统(详细设计)

局域网聊天系统 详 细 设 计 成绩:

目录 1.功能需求 (1) 2.数据库设计 (1) 2.1 基本表设计 (1) 2.1.1 表结构汇总 (1) 2.1.2 T_Users表结构设计 (2) 2.1.3 XXX表结构设计 (2) 2.2 视图设计 (2) 2.2.1 视图汇总 (2) 2.2.2 XXX视图设计 (2) 2.3 存储过程设计 (3) 2.3.1 存储过程汇总 (3) 2.3.2 XXX存储过程代码 (3) 3.服务器端设计及实现 (3) 3.1 启动服务器功能的设计与实现 (3) 3.1.1 界面设计 (3) 3.1.2 流程 (4) 3.1.3 关键代码 (4) 3.2 消息管理功能的设计与实现 (4) 3.2.1 界面设计 (3) 3.2.2 流程 (4) 3.2.3 关键代码 (4) 4.客户端的设计与实现 (5) 4.1 注册模块的设计与实现 (5) 4.1.1 界面设计 (5) 4.1.2 流程图 (6) 4.1.3 关键代码 (6) 4.2 登陆功能的设计与实现 (6) 4.2.1 界面设计 (5) 4.2.2 流程图 (5) 4.2.3 关键代码 (6) 4.3 聊天功能的设计与实现 (7) 4.3.1 界面设计 (8) 4.3.2 流程图 (8) 4.3.3 关键代码 (9) 5.人员及分工 (9)

局域网聊天系统 详细设计1.功能需求 图 1 项目功能结构图2.数据库设计 2.1 基本表设计 2.1.1 表结构汇总 表 1 基本表汇总

2.1.2 T_Users表结构设计 表 2 用户表(T_Users)结构设计 2.1.3 XXX表结构设计 表 3 XXX(xxx)结构设计 2.2 视图设计 2.2.1 视图汇总 2.2.2 XXX视图设计

计算机网络--简单聊天程序的设计与实现

实验报告 课程计算机网络实验名称简单聊天程序的设计与实现第 1 页 一、实验目的 1.熟悉VisualC++的基本操作;掌握最基本的Client/Server(客户机/服务器)模式 的网络编程技术,并在此基础上实现更为复杂的网络编程。 2.基本了解基于对话框的windows应用程序的编写过程。 3.对于Windows Socket编程建立初步概念。 二、实验内容 1、按实验步骤中参考程序使用VC++设计出程序; 2、在第1步的基础上使用VC++或其他工具设计出一个能实现两个人聊天的网络程序。 三、实验原理 1.Windows Socket和套接字的基本概念; 程序分为服务端和客户端两个,其主要工作过程如图1所示: 服务器端:服务器程序首选启动,通过调用socket()函数建立一个套接字,然后调用bind()函数使套接字和本地网络地址联系在一起,再调用listen()使套接字做好侦听的准备,并规定它的请示队列的长度,之后就调用accept()来接收连接。客户机端:客户机程序也使用socket()建立套接字,然后调用connect()函数和服务器建立连接。连接一旦建立,客户机和服务器之间就可以通过调用read()和write()来发送和接收数据。 最后,等数据传送结束后,双方调用close()关闭套接字。 四、实验环境和实验工具 实验环境:Windows 平台、实验工具:VC++ 五、实验步骤 服务器端程序 (1)运行VC++,选择File --->New,弹出如图2所示的窗口。 (2)创建一个名为CS的工程:选中Projects中的MFC AppWizard[exe],在Project name中 输入Server,在Location中选择存储的目录,如本例中为D:\VC temp\.接着点击OK。 (3)在弹出的窗口中选择Dialog based,然后点击“Next”。出现图3所示的窗口,选择Windows Sockets,并输入服务器,点击“Next”. 如果忘了添加Windows Sockets选项,可以在文件头部添加下列语句进行补救: #include "Winsock.h" #include "Ws2tcpip.h" #pragma comment(lib,"Ws2_32.lib" ) 注:这些语句支持winsock2。 (4)其余窗口一直默认,点击“Next”直至“Finish”

基于MFC的聊天程序设计

聊天程序设计报告 ----网络编程设计报告 目录 【1】设计原理————————————————————————1 【2】功能描述————————————————————————1 【3】详细设计————————————————————————2 【4】工作进度————————————————————————7 【5】设计总结————————————————————————8 【6】使用方法————————————————————————9 【7】附录——————————————————————————9 一. 设计原理 计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、中国移动的Fetion等,都是做的比较成功的实时聊天工具。随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《网络编程》这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。接下来的课程设计就是针对一个简单的网络聊天程序,利用MFC为开发工具,实现基本的通讯功能。 此程序主要分为两个模块:服务线程和聊天线程。服务线程用于提供一个网络端口,等待客户线程发出请求,登录到作为服务端的程序,然后进行网络通讯和消息的收发;客户端可通过服务器端的IP地址发送连接请求,然后建立连接,进行通讯。整个程序的主体使用了CSocket类的方法,实现了网络通讯聊天。 二.功能描述(需求分析) 1、一对一会话。此程序既可以作为服务器,也可以作为客户端。当发起聊天请求时是客户端,而当接受连接请求时时服务器。通讯基于可靠的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:客户端上显示的树形列表,以及可实现发送消息头像闪动等。三、调试数据 首先启动服务器端

基于JAVA局域网聊天程序设计与实现(附源代码)

局域网聊天课程设计 摘要 随着互联网的发展,网络聊天工具作为一种交流工具,已经受到网民的青睐。目前,出现了很多功能强大的聊天工具,其中应用比较广泛的有腾讯QQ、MSN-Messager等等。 即时通讯软件,是每一个上网用户都需要的工具,它除了能够让您迅速地在网上找到自己的朋友和伙伴之外,还可以实时交谈和传递信息,截止到目前,全球约有近3亿多人使用即时软件,正因为即时通讯软件拥有数以亿计的用户和增长的市场,所以各个公司都盯上了这个最大的市场,一时间,即时通讯市场硝烟四起。 对等网络(peer-to-peer,简称P2P),应用最初出现时和现在并不相同。事实上可以认为它是若干不同技术以及流行趋势相结合的产物。以下是导致P2P技术发展最重要的趋势:首先,一些新技术与软件工程的结合,形成了一种将工作分散的趋势。P2P计算正是这种分散工作趋势的结果。其次,在企业应用集成等因素的驱动下,过去十年渐渐形成从集中的单机系统转向分布式系统。然而随着互联网的发展,全面的分布式计算也就成为一种迫切需求。 关键词:局域网聊天 P2P java

Abstract With the development of the Internet,the chat tool as a communication tool, has been popularly accepted by netizens of all ages. At present, there are many powerful chat tools, of which Tencent QQ, MSN-Messager are much more prevalent. Instant messaging software is necessary for every one who connects to the internet, which can not only provide you a prompt way to find friends and partners online, but can provide you the convenience of internet relay chat and information delivering. Up to now, there are about 300 million people using real-time software all over the world. As more and more corporations have focused on this market with growing potential, which has hundreds of millions of uses, the competitions among these corporations are extremely fierce. The initial application of peer-to-peer network (peer-to-peer, referred to as P2P) is not the same as it is now. In fact, it can be regarded as a combination of different technologies and fashion trends. Below are the most important trends that have led the development of P2P technology: First of all, the integration of software engineering and new technologies led to a working dispersion trend. As a result, P2P computing was born. Then, in the past decade, it has turned fro m a single centralized system to distributed system due to the motivation of factors such as enterprise application integration. At last, with the development of the Internet, however, a comprehensive distributed computing has become an urgent need. Keywords:LAN chat P2P java

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)进行数据交流,初步掌握网络聊天通信程序的设计方法。并能巩固和扩展大学期间的学习内容,进行项目的设计开发训练,更好的适应社会的需求。

一对多的聊天程序设计

实习题目:一对多的聊天程序设计 设计要求:实现一个一对多的聊天程序:包含服务器端和客户端;要求具有图 形界面;支持多人聊天;可采用UDP或者TCP协议。 原理概述:本程序是利用java程序实现一对多聊天软件的设计。首先编写服务器端的程序ChatServer,然后编写客户端的程序ChatApplet,客户端程序是可以嵌入到浏览器里的Applet里的小程序,即客户端通过网页登陆。服务器端的程序为每个连入的ChatApplet创建一个对应的线程,该线程监听对应Applet 是否有消息传来,若有消息传来则把信息广播给每个连入的客户端Applet。服务器程序的主入口是main()方法,它负责服务端口的定义和初始化以及接受用户的连入请求并通知所有用户Applet有新用户加入,而且循环监听。监听线程采用的是Runnable接口,线程的执行体是在Run()方法中实现的,调用线程是由main()方法中的语句new Thread(st).start();,另外发送信息采用的是线程同步机制Synchronized()。 设计方案:一.通讯协议的选择 TCP与UDP有各自的优点。TCP是面向连接的协议,能满足大范围的应用程序的要求,能调节网际的动态环境,建立和管理本地通信进程之间的对话,维护TCP在流出和流入传输层TCP的模块的每个用户的状态和信息,拥有窗口流量控制机制和重传机制,实现非常可靠的数据传输,它的安全性和可靠性比UDP要高出很多。UDP是面向非连接的传输协议,UDP的应用程序在高可靠性、低延迟的网络中运行很好,在通讯子网QoS相对低下的情况下,可能无法正常运行,因为在于数据包的频繁丢失。虽然UDP如此不可靠,但是由于它传输的高效率,仍然被广泛采用。在某些场合的一来一往只有两次数据报的交换中,UDP比TCP更加有效,因为TCP的建立连接和撤消连接的开销往往要大得多。 本程序设计在客户端与服务器端的协议采用了UDP,虽然在效率上占了优势,因为依照目前网络通讯的发展,通信子网在其性能上的提高,使得UDP 可以发挥其强大的优势,但是安全性却实在令人担忧。 综合考虑的结果,在本聊天工具的客户端和服务器端的通讯采用TCP协议。而客户与客户端的通讯采用UDP协议。 二.线程技术的选择 在单线程系统中,如果系统进行如网络数据发送等在后台进行工作的应用程序时,程序界面就会处于死锁状态,无法接受用户的输入。但抢占式多任务,每一个进程可以同时执行多个任务,对于本系统,既要保证多用户之间可以进行聊天,又要保持对用户的响应,使用多线程是最佳选择。 三.套接字SOCKET的应用 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通

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

课题名称: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环境下的网络应用程序编程接口叫

局域网聊天程序的实现

分类号:TP311.1 U D C:D10621-032-(2007)6165-0 密级:公开编号:2003032147 成都信息工程学院 学位论文 局域网的聊天程序的实现 论文作者姓名:吴剑辉 申请学位专业:网络工程 申请学位类别:工学学士 指导教师姓名(职称):王海春(教授) 论文提交日期:2007年06月10日

局域网的聊天程序的实现 摘要 网络通讯是目前计算机用户进行交流最普遍的方式,各种各样的聊天软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。本文介绍了在Windows环境下开发局域网聊天程序思路和方法。系统使用流行的Delphi7.0开发软件,采用Socket技术实现网络通讯。数据库使用Delphi自带的Database desktop。系统采用典型的C/S(服务器/客户端)构架。系统主要实现了用户注册、登录、聊天、服务器管理等功能。本系统从需求分析、系统的设计、具体功能的实现都严格遵循了软件设计工程的思想。 关键词: Socket; TCP/IP; C/S

The Implementation of LAN Chatting Program Abstract Network is the most popular way of communication between computer users, therefore a lot of chatting softwares come out; on the other hand, more communication services are provided by the ISP. This paper introduces the ideas and methods of LAN chatting program which are developed on Windows. This system is developed by the Delphi7.0 software, and uses the Socket technology to implement network communications. Database using its own database desktop. Software is based on C/S architecture. The system mainly implements the functions of user registration, login, chatting, server management etc.From requirement analysis, outline design, detailed design to coding, function test, the implementation of the function in this essay absolutely follow the process of the software development. Key words:Socket; TCP/IP; C/S

聊天室程序设计

JA V A网络编程 ------文本传输 学院:通信与信息工程 班级:电子商务1002班 姓名:王鹏飞 学号:1007100222

JAVA 网络聊天室 功能描述 网络聊天室是一种应用广泛网络聊天方式,操作简单,功能丰富,是教学和学习面向对象的编程思想的理想项目。可以使用多种编程语言设计和开发出功能完善的网络聊天室。 本系统采用C/S 架构设计,用JAVA 语言设计和实现,整个项目分为服务器端和客户端。使用了最新的JAVA SE 标准Swing 组件,开发出简洁美观布局合理的客户端和服务器界面;利用Socket 网络开发技术实现客户端和服务器端的连接访问,实现网络通信功能;通过对数据流合理的封装,实现信息发送和接受。同时,采用多线程、多任务的设计思想,令服务器性能稳定,客户端通信流畅,基本实现聊天室的功能。 服务器端功能: 服务器的基本功能有:启动服务器,关闭服务器,监听客户端连接请求,显示在线用户,显示客户端连接信息,发送系统消息等。 服务器 监听客户端请求 显示在线用户列表 显示客户端连接信息 发送系统消息 关闭服务器 启 动服务器 服务器端功能描述: 1. 启动服务器:客户在运行服务端程序后,点击启动服务器,服务器程序创建 并箭筒特定端口的ServerSocket,并启动一个主线程,等待客户端的连接,如

果有客户端连接,服务器向工作线程队列中加入与客户通信的任务,工作线程不断从工作线程中取出任务并执行。同时在服务器消息面板中显示,服务器启动成功。 2.关闭服务器:服务器关闭时,向所有连接的客户端发送消息,告知将服务器 关闭,同时关闭socket,之后服务器界面关闭 3.监听客户端请求:服务器在启动后一直监听客户端的运行情况,比如有新用 户登录,用户退出等。 4.显示在线用户:用户登录后即客户端与服务器连接成功,服务器端用户列表 界面显示出所有登录用户的用户名,用户退出后服务器更新用户列表 5.显示用户连接信息:用户在登录成功后,服务器端服务信息界面显示用户登 录的信息,包括客户端IP地址,端口号。 6.发送系统消息:可以从服务器端广播系统消息,该消息会发送给所有连接的 客户端,此功能可用于服务器管理者向所有用户发送重要的系统消息。 服务器界面如下图所示:

网络课程设计实验报告--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)// 验证用户名

局域网即时聊天程序的设计与实现论文

摘要 局域网即时聊天通过进行文本聊天和语音聊天来实现彼此沟通、交流信息。 本次局域网即时聊天程序设计主要用了Visual C++编程环境,实现了在LAN中 在线用户的文本、语音交互。 在设计里涉及到了网络通信基本原理和Socket编程及语音处理API技术。 由于程序是在TCP/IP环境下运行,所以分服务器端和客户端。服务器端和客户 端是通过建立Socket链接来实现聊天功能。 本次设计主要着重于语音聊天部分,在本次论文里主要以语音聊天的流程和 各模块之间的关系及Socket处理为主说明。 关键词: Visual C++编程环境网络通信基本原理 Socket编程语言处理API

Abstract The local area network chats immediately through carries on the text to chat with the pronunciation chats realizes each other communication, the exchange information. This local area network chatted the programming mainly to use Visual immediately the C++ programming environment, has realized in LAN the on-line user's text the pronunciation interactive Involved in the design to the network correspondence basic principle and the socket programming and the pronunciation processes the API technology. Because the procedure is in TCP Under the IP environment moves, therefore divides the server end and the client side. The server end and the client side are through establishes Socket to link realizes chats the function. This design mainly emphatically chats in the pronunciation the part, mainly between the flow and various modules relations and the socket processing which chats by the pronunciation primarily explained in this paper. Keywords:Visual C++ programming environment network communication fundamentals Socket programming sound API.

简易聊天应用程序的设计与实现

Java网络程序设计大作业分组报名表

目录 一、团队介绍及人员分工..................................... 错误!未定义书签。 团队介绍 .............................................. 错误!未定义书签。 人员分工 .............................................. 错误!未定义书签。 二、作品概述............................................... 错误!未定义书签。 创作背景 .............................................. 错误!未定义书签。 功能概要 .............................................. 错误!未定义书签。 相关技术 ............................................... 错误!未定义书签。 作品可行性分析 ........................................ 错误!未定义书签。 三、需求分析............................................... 错误!未定义书签。 功能性需求 ............................................ 错误!未定义书签。 非功能性需求 .......................................... 错误!未定义书签。 四、作品实现............................................... 错误!未定义书签。 服务端界面实现 ......................................... 错误!未定义书签。 客户端界面实现 ......................................... 错误!未定义书签。 登录实现 ............................................... 错误!未定义书签。 聊天功能实现 .......................................... 错误!未定义书签。 退出功能实现 .......................................... 错误!未定义书签。 五、作品设计、实现难点分析................................. 错误!未定义书签。 难点分析 .............................................. 错误!未定义书签。 解决方案 .............................................. 错误!未定义书签。 测试结果 .............................................. 错误!未定义书签。

相关主题