网上聊天室的设计与开发(课程设计)

网上聊天室的设计与开发(课程设计)
网上聊天室的设计与开发(课程设计)

课程设计

题目:网上聊天室的设计与开发

第一章引言

1.1 课题的提出

1.1.1需要解决的问题

该课题要研究的是采用JXTA技术来创建网上聊天室。该聊天室应该能够体现对等网络(P2P)交互的思想,不依赖于中间服务器而实现用户之间的直接通信,聊天。聊天的各个用户应该是完全的对等体。

1.1.2对问题的分析以及解决方法的提出

传统的网上聊天室采用的是客户/服务器模式,聊天的用户要想聊天必须首先登陆服务器,在服务器上验证之后,再由服务器向用户提供服务。这种模式对服务器的性能,以及资源要求比较高。而本课题研究的是如何采用对等网络(P2P)技术来创建网上聊天室。由于P2P技术是一项比较新的技术,目前在P2P领域做的比较好的要数JXTA技术了,因此考虑采用JXTA技术来创建网上聊天室。至于聊天室具体的实现,可以用java,也可以采用C#,本课题立足于java编程语言来实现这个网上聊天室。

1.1.3存在的需要解决的问题

1.该课题研究的是采用P2P技术来构建网上聊天室,因此在对传统的客户/服务器模式有所了解的基础上,应该发挥出P2P技术的特点。所以必须对P2P技术很熟悉。

2.P2P技术是一个比较笼统地概念,要完成P2P技术的聊天室,必须选定一个支持P2P技术的开发平台。在此平台下来进行聊天室的创建。

3.创建的聊天室应该能够实现各个用户之间的实时交互,并且具有C/S模式聊天室的一些基本功能。并能切实的发挥出P2P技术的优势。

1.2 JXTA技术的背景以及采用该技术创建网上聊天室的可行性

对等网络P2P (Peer to Peer) 是因特网实现下一次飞跃的关键, 在P2P 网络模式的研究领域里, JXTA (juxtapose , 并行) 作为一种全新的P2P 网络解决方案已经日益受到关注。

1.2.1P2P 概述

P2P(Peer to Peer) 技术,中文译为对等互联或点对点技术。在P2P 网络中没有指定的客户机(Client) 、服务器(Server) 的概念,任何节点都可能成为客户机或服务器。从本质上说,P2P 网络提供了一种在不需要超强中心服务器情况下将各个PC 机联接起来的解决方案。

目前,大多数分布式网络都采取客户/ 服务器模式,在这种模式中,客户请求服务,服务器提供服务。这种模式是集中式网络模式的典型代表,整个网络完全依赖于中心节点—服务器来提供服务,一旦服务器出现故障,整个网络则近乎瘫痪。

不同于客户/ 服务器模式,P2P 网络是一种分散式的网络模式,如图1 所示。在这种网络模式中不存在固定的客户、服务器,网络中的每一个实体称为对等体(Peer) ,它们具有对等的地位,这意味着任何实体都可以向其它实体请求服务(作为客户) 或给其它实体提供服务(作为服务器) 。图1 说明了这种网络模式的结构。虽然所有的对等体都具有相同的地位,但它们并不具备相同的物理处理能力。P2P 网络中包含着从移动设备到大型主机等各种具有不同能力的对等体。可移动对等体可能由于自身条件的限制并不能成为其它对等体的服务器,但是这并不会影响整个P2P 网络的性能。

当然,这两种网络模式都各有优缺点。在客户/服务器模式中,随着客户机的不断增加,中心节点—服务器的压力会越来越大。客户机的增加意味着服务器性能的削弱,而服务器的故

障又将导致整个网络的崩溃。而在P2P 网络中,每个实体都是网络活动的积极参与者,它们为P2P 网络提供了诸如存储空间、CPU 等资源,随着对等体的不断增加,网络的处理能力和存储能力也随之增强,所以并不会出现上述客户/ 服务器网络的不足。理论上讲,在P2P 网络中只要有一个对等体还处于活动状态便可认为P2P 网络仍然可以继续运行,这一点是不同于客户/服务器网络模式的。当然,P2P 网络也有缺陷,它不易管理,它的安全策略、备份策略等都造成了系统管理的复杂。另外,由于每个对等体均可任意的加入或离开P2P 网络,因此, P2P 网络协议的交互性较强,这对网络的性能也有一定的影响。

图1-1 The peer to peer model

1.2.2 JXTA 技术

1.2.2.1 概述

JXTA技术是由SUN公司在2001年2月提出的一项新技术,主要用于提供P2P程序所需的基础服务。该技术致力于创建一个通用的平台,以简单而有效的方式构建特定的对等式和分布式服务与应用,使得开发者不需要过多考虑如何解决对等计算的技术问题,而可以专注于如何实现与完善可扩展、互操作性强且具有高可用性的高层应用。

不同的协议、不同的体系结构、不同的实现机制准确的描述了当前P2P 解决方案的特点,开发者使用不同的方法开发P2P 应用程序,由于没有统一的标准,通用性很差。鉴于

此,Sun 公司提出了JXTA 技术。

JXTA 技术提供了建立P2P 网络应用的核心技术,旨在为P2P 应用建立一个通用的开发平台。JXTA 技术主要包括一个独立于编程语言、系统平台和网络平台的协议集,这个协议集说明了P2P 应用的最基本的需求。可以说,JXTA 是位于操作系统或虚拟机之上、P2P 网络服务或应用之下的一个P2P 堆栈,它提供了P2P 应用所需的核心功能。

目前,JXTA 定义了六个协议,但并不是每一个JXTA 对等体都必须实现这六个协议,它需要实现哪些协议是由对等体自身的能力决定的。建立在TCP/ IP 协议之上的各个应用并不具备交互能力,同样建立在JXTA 协议之上的应用也不具备交互能力,要实现这种交互,开发者必须自行开发。提供基础协议的第一步是要选择大部分平台都可理解的数据表达方式,JXTA 采用XML (eXtensible Markup Lan2guage) 来实现数据的表示。XML 语言是一种通用的、独立于语言、独立于平台的数据表达方式,而且它易于转化为其它编码形式。因此,JXTA 用XML语言定义了所有的协议。

1.2.2.2JXTA 的术语

对等体( Peers) : 对等体是任意能够使用JXTA协议的实体。对等体可以表现为一台大型机、一部移动电话、一个进程等等。每一个对等体都是独立存在的,它和其它对等体进行

异步通讯。

对等体组( Peer Groups) : 对等体组是一个支持对等体组协议的虚拟的实体。一般来说,对等体组就是一组相互合作提供公用服务的对等体的集合。JXTA 对一个对等体或对等体组的产生次序并不关心,它也不限制对等体可同时参加的组数以及是否可以生成嵌套的组。它仅仅定义了如何使用对等体发现协议(PDP) 来发现一个对等体组。对等体组中有一个特殊的组称为世界对等体组(the World PeerGroup) ,它包含所有的JXTA 对等体。虽然所有的JXTA 对等体都属于世界对等体组,但并不意味着在这个特殊的组中所有对等体都一定能够相互发现或通信,因为它们可能被网络分隔开来。默认情况下,每一个对等体都参与到世界对等体组当中。

消息(Messages) :在JXTA 网络中,所有的通信都是通过发送和接收消息实现的。消息用于异步的、不可靠的、单向的传输,它被设计成一个数据报的形式,包含封装体和带有协议头堆栈的主体。这个封装体包含头部、消息摘要、源端点和目的端点。一个端点就是一个逻辑目的地, 以URL (Universal Re2source Locater) 的形式给出。通过消息层可以将端点映射为物理地址。每一个协议主体都包含可变数量的字节。

管道(Pipes) :管道是一种异步的、单向的、用于收发消息的虚拟信息通路。管道有输入管道和输出管道。一个管道端点可以绑定到多个对等体节点。通过管道绑定协议( PBP) ,管道可在运行时刻动态绑定到一个对等体节点。在不同的时刻,同一管道可以绑定到不同的对等体。例如,当一个对等体组提供高级的容错服务时,一旦有一个对等体失效,只需要将管道重新绑定到新的对等体上就可以保证系统继续顺利运行。管道将两个对等体联系在一起,对于发送方来说是输出管道,对于接收方来说它是输入管道,传输是由发送方到接收方的单向传输。传播管道可以将一个输出管道与多个输入管道相连,这样,任何一个发向输出管道的消息将被发向所有与之相连的输入管道。管道可以使用任何单播或多播协议以及它们的算法。实际管道可以串接在一起,串接的每一段可以使用完全不同的传输协议。

代码/ 数据(Codat 即Code/ Data) :在JXTA 中Co2dat 是指文本内容,它可以是代码或数据。Codats 可以被发布、发现或复制。

服务(Services) :对等体和对等体组都可提供服务。对等体服务是由单个对等体提供的,一旦对等体出现问题,服务就可能不复存在;对等体组服务是由多个对等体提供,因此具有更强的可靠性。

广告(Advertisements) : 广告用于发布或发现任何JXTA 资源,包括对等体、对等体组、管道或Co2dats ,广告表示成XML 的形式。标识符( Identifiers) :标识符用来唯一标识一个实体(如对等体、广告、服务等) 。JXTA 的标识符定义为URN(Uniform Resource Name) 的形式,URN 实际就是URI (Uniform Resource Identifier) ,它可唯一标识资源。

1.2.2.3JXTA 协议

对等体发现协议( Peer Discovery Protocol 即PDP) :该协议是包括世界对等体组

( the World PeerGroup) 在内的所有对等体组的默认发现协议。对等体通过PDP 协议发现已经发布的JXTA 资源。由于使用广告表示资源,所以PDP 实际上用于发现其它对等体上的广告。

对等体解析协议(Peer Resolver Protocol 即PRP) :在JXTA 网络中,对等体向其它对等体发送请求以寻求所需服务,PRP 协议用于标准化请求的格式。

对等体信息协议( Peer Information Protocol 即PIP) :PIP 协议使一个对等体能够了解其它对等体的信息和状态。例如:可以发送一个Ping 消息来判断一个对等体是否已经激活。如果对等体的属性有名字和值,可以通过本协议得到它的属性信息。

对等体成员资格协议( Peer Membership Protocol即PMP) :对等体可通过PMP 协议加入或离开对等体组。PMP 协议包括四个独立的部分: 申请( ap2ply) 、加入(Join) 、更新

( renew) 、取消(cancel) 。每一部分都定义了相应的JXTA 消息格式。权力认证和安全管理可以提供相应等级的保护。

Apply:如果一个对等体对某一个组感兴趣,便可以向这个组的认证机构发送申请

求;Join :申请之后,对等体就可发送加入请求;Renew:如果对等体需要更新它在组内的成员

信息,可以发送更新请求;Cancel :对等体可以通过发送离开请求选择离开这个组。

管道绑定协议(Pipe Binding Protocol 即PBP) :在JXTA 环境中,对等体通过管道访问服务,它可以在运行中时时绑定到一个管道的端点以便访问服务。对等体还可以创建新的服务、绑定到一个存在的管道或解除管道绑定。这些情况下都用到了PBP 协议。从某种意义上来说,一个管道可以看作是一个支持新建、打开、关闭、删除、发送、接收等抽象操作命名的消息队列。绑定发生在打开操作阶段,而解除绑定发生在关闭阶段。

端点路由协议( Endpoint Routing Protocol 即ERP) :该协议可以保证一个对等体向另一个路由对等体问询到达目的地的可用路径。一般两个通信的对等体并不直接相连。例如,

两个使用不同网络协议的对等体或被防火墙和网络地址转换(NAT) 分隔的对等体。对等体路由用有效的路由信息来响应请求,通常路由信息是这条路径所经过的网关列表。

1.2.2.4JXTA 体系结构(Architecture)

JXTA 软件的体系结构分为三层,其层次结构如图2 所示。

图1-2 The JXTA Layer - Cake

从图2 可以看出,最底层是平台层即核心层,这一层包含了P2P 网络的最基本的要素,如对等体或对等体组(Peer) 的建立、资源发现、通信管理(如路由等) 和其它一些底层的服务。中间层是服务层,在这层中提供诸如索引、查找、文件共享、协议转化、授权服务、PKI (Public Key Infrastructure) 服务之类的高级服务。这些服务需要大量调用由核心层提供的基本操作。高层是应用层,它主要提供诸如邮件、存储之类的服务。当然,一些特性如安全管理在这三层中均有体现并贯穿于整个P2P 系统。

JXTA 的体系结构与其它分布式网络实现模式的区别主要表现在以下三个方面:

.JXTA 使用XML 文档来描述网络资源;

.JXTA 网络中不使用中心命名机制和中心寻址机制;

.JXTA 网络采用统一的对等体寻址机制

1.2.3 采用JXTA技术创建聊天室的可行性

由本课题的要求来看,采用P2P技术创建网上聊天室,由于JXTA技术是P2P技术的开发平台,所以,在JXTA平台上可以自己编程实现网上聊天室。JXTA非常适合编写聊天程序,而且可以有多种实现方法,包括完全的集中式、代理方式到完全非集中式。而且一个非常有意思的情况是,用JXTA来实现一个集中式的聊天程序非常困难,而实现完全非集中式的聊天程序反而简单,因为JXTA平台本身已经完全解决了底层Peer之间的发现和通信问题。

1.2.4 聊天室编程的实现语言的选取

虽然JXTA技术是独立于语言的,可以采用C#或者是java编程语言。但是在实现该聊天室的时候,采用了java语言作为开发工具。因为java在开发P2P程序方面有其固有的优势,主要是在各个平台之间的可移植性。Java提供我们详尽的API,可以建立相当好的平台。

1.3 课题的目的

本课题目的在于采用现在比较新的技术P2P技术来创建网上聊天室,该聊天室应该能够实现点对点客户直接交互,包括一对一,多对多的用户之间的不依赖于服务器的直接通信。

第二章总体设计和概要说明

2.1 设计前的准备

2.1.1 建立Java环境

使用JXTA首先要建立环境,必须为运行JXTA建立Java环境。为此需要三个要素:Java

平台,JXTA类库和需要运行的JXTA程序。

首先是建立Java平台。要提供Java平台,需要Java2标准版(J2SE的1.3.1版或者更高版本),本次设计安装了1.4版的。对于JXTA编程,还需要Java2软件开发包(SDK)。在安装了Jdk之后,还需要配置Java环境变量。

其次,是获得JXTA类文件和程序。JXTA的类库可以从网上站点

https://www.360docs.net/doc/ec8599380.html,/easyinstall/install.html下载。由于使用的是Windows操作系统,故下载了可执行(.Exe)文件.。按照提示进行安装。为了编程实现的方便,还安装了JCreator3.10。

2.1.2 JXTA应用程序配置

在安装了JXTA之后,还需要打开JXTA configurator tool(JXTA配置管理器)进行配置,配置的信息保存在本地目录中。配置信息还包含了一个本地端口号,JXTA应用程序将在该端口上进行监听。

2.2 设计思路与模块划分

本次设计将根据聊天室的具体实现功能而将设计分成三个部分来完成,这三部分是:发现服务通告;构建JXTA管道使得对等体相互通信;使JXTA聊天程序成为服务。其中使JXTA程序成为服务将在发布通告和JXTA管道进行通信的部分说明。因为无论是发布通告还是构建管道都是与使JXTA成为服务密不可分的。

本次设计的主要程序包有以下几个:

net.jxta.discovery包

对等体使用net.jxta.discovery包中的发现服务去发现JXTA环境中的资源。对等体使用发现服务去发现已发布的通告,包括对等组,管道和网络服务的通告。当发现服务查找到一个新的资源时,就发送发现事件对象。发现事件被发送到该监听者的DiscoveryEvent()方法。

实现DiscoveryListener接口的对象能够在发现服务中注册,当找到新的通告,它将调用这个已注册对象的DiscoveryEvent()方法,并向该方法传递一个DiscoveryEvent对象。

DiscoveryService接口通过PeerGroup类的getDiscoveryService()方法来获得特定的对等组的发现服务。应用程序使用getRemoteAdvertisement()方法寻找未缓存的通告。该方法使用PDP发送发现消息,发现事件监听者通过调用addDiscoveryListener()方法在发现服务中注册,当发现了新的通告,该监听者将被调用。

net.jxta.peer包

该程序包中包含了处理JXTA对等体信息的类,获取对等体信息的过程与发现对等体的过程相同:先查询本地缓存中的对等体通告,再查询提供远程对等体信息的对等体服务。

net.jxta.peergroup包

JXTA对等体通过调用PeerGroup类的newGroupFactory()方法来加入MyJXTA对等组,该方法返回一个对等组对象。

net.jxta.pipe包

管道是对等体之间进行通信的主要手段。InputPipe用于读取其它对等体发来的消息,createInputPipe()方法用于创建输入管道。OutputPipe用于向其它的对等体发送消息,createOutputPipe()方法用于创建输出管道。当一个输入管道连接到一个输出管道时,管道间的路径必须被解析。管道路径的解析用OutputPipeEvent类来表示。

第三章发现服务通告

3.1 通告的使用与构造

3.1.1 通告的使用

通告是JXTA的核心,只有通过寻找通告才能发现JXTA的对等体及其资源,而且只有

通过发布通告才能向外界提供自己的服务。

通告由抽象类Advertisement表示,每个通告都有一个唯一的类型,用getAdvertisementType()方法获取该类型。JXTA API定义了以下的核心通告类型:PeerAdvertisement

PeerGroupAdvertisement

PipeAdvertisement

PeerInfoAdvertisement

EndpointAdvertisement

TranseportAdvertisement

获取通告对象有两种途径,首先是创建通告对象。当发布通告时,必须创建通告对象。其次,可以通过PeerGroup类的getPeerGroupAdvertisement()方法获取用于创建对等组的通告。

3.1.2 通告的构造

通告对应着不同的资源,虽然各种通道的类型不同,但是它们的创建方式相同。首先,从AdvertisementFactory类获取一个空白的通告文档。然后使用特定类型的通告内部的方法来设置通告文档中的各个要素。

3.2 JXTA发现

聊天的对等体首先要做的是了解其周围环境。对等体在四周环境中寻找资源,支持自身,访问需要的服务以及支持自己的范围。用户要找人聊天,首先必须发现并加入聊天组。当然,不能保证用户进入聊天室的时候,聊天组已经存在,所以peer用户必须好去创建聊天组。

JXTA中的发现是在对等组环境中执行的,每个对等体都会加入到MyJXTA对等组中。在MyJXTA环境中执行的发现使得任何对等体都可能发现在MyJXTA中发布的任何通告。由于MyJXTA中的通告的数量十分庞大,因此在MyJXTA中执行发现是是不切实际的。因此聊天的对等体应该尝试在MyJXTA中发现对等组,然后在更小的对等组内发现其它资源。

3.2.1 异步发现机制

JXTA发现使用一种异步机制来发现通告。想要发现资源的对等体在选定的对等组范围内传播一个发现请求。该请求的响应是异步接收的。是否能接收到响应或者什么时候能收到响应是不确定的。这种不可预料且不可靠的P2P网络使得难以指定超时时间或预知行为。应用程序的职责在于判断得到相应的时间。异步编程模型最适合与这种不可靠的P2P网络环境。异步机制大大简化了错误恢复,因为错误是作为普通情况来处理,而不是作为异常来处理的。

3.2.2 发现服务的实现

GroupSearch负责发现对等组,如果没有找到对等组,那么对等体将创建对等组。

GroupSearch类的结构很简单:

1.发现现有的对等组的通告

A.寻找本地缓存中以前发现的通告。

B.发送PDP请求,以发现通告。

这可以使用广播类型机制或者通过联系已知的汇聚对等体来完成,这两种方法都是同步调用。在后台,API将创建一个新的县城来侦听响应。随着响

应的到来,后台线程将读取它们,并把响应插入到对等体的本地通告缓存中。

C.等待响应得到来。

D.再次查看本地缓存中的响应。

2.如果没有找到现有的PeerGroup,就为之创建一个对等体通告,再根据通告创建PeerGroup组。

3.如果现有的PeerGroup 没有找到,就使用发现通告来加入对等组。

下面是执行这些步骤所必须的代码:

package net.jxta.myjxta2.search;

import net.jxta.peergroup.PeerGroup;

import net.jxta.myjxta2.util.Group;

import net.jxta.myjxta2.util.GroupNode;

import net.jxta.discovery.DiscoveryListener;

import net.jxta.discovery.DiscoveryService;

import net.jxta.discovery.DiscoveryEvent;

import net.jxta.protocol.DiscoveryResponseMsg;

import net.jxta.protocol.PeerGroupAdvertisement;

import java.io.IOException;

import java.util.Enumeration;

import net.jxta.myjxta2.MyJXTA;

public class GroupSearch

extends AbstractSearch

implements DiscoveryListener {

public static final String ATTRIBUTE_NAME = "Name";

//定义的ATTRIBUTE_NAME 为我们想要搜寻的属性的名称

//定义要搜寻的标题

private static final String TITLE = "Group Search";

/*对搜寻的描述*/

private static final String DESCRIPTION = "groups";

public GroupSearch(Group group, MyJXTA myJxta) {

super(group, myJxta);

setTitle(TITLE);

}

public String getSearchDescription() {

return getDescription(DESCRIPTION);

}

在这段里面,首先创建一个GroupSearch的实例,参数group是搜寻完成之后所在的组。参数MyJXTA表示本系统得默认实例。当前在该实例中搜索到的对等组可能和group参数代表的对等组不同。

//下面的程序实现对特定条件的对等组

//参数term是指要搜寻的对等组的条件

public void search(String term) {

setTerm(term);

String criteria = (term.trim().length() == 0 ||

term.equals(WILDCARD) ? null : term);

cancel();

isRunning(true);

DiscoveryService discover = getDiscovery(); // this also fixes the group

try {

process(discover.getLocalAdvertisements(

DiscoveryService.GROUP,

criteria != null ? ATTRIBUTE_NAME : null, criteria));

} catch (IOException ioe) {}

discover.getRemoteAdvertisements(null, DiscoveryService.GROUP,

criteria != null ? ATTRIBUTE_NAME : null, criteria,

REMOTE_THRESHOLD, this);

isRunning(false);

}

//discover.getRemoteAdvertisements()方法用来搜寻本地的通告,因为要搜索的通告可//能已经保存在本地缓存中了,如果本地缓存中已有该对等组,就不需要再到网络上去搜寻了。//一般的搜索都是按照先本地,再网络的方法进行的。

public void cancel() {

if (isRunning()) {

isRunning(false);

getDiscovery().removeDiscoveryListener(this);

super.cancel();

}

}

public void discoveryEvent(DiscoveryEvent de) {

DiscoveryResponseMsg rm = de.getResponse();

if (rm.getDiscoveryType() == DiscoveryService.GROUP) {

process(rm.getAdvertisements());

}

}

// discoveryEvent()方法用于处理发现事件,因为该系统得设计是基于事件的。如果发现了要搜寻的对等组,就作出响应,返回发现的类型。

private void process(Enumeration advertisements) {

PeerGroupAdvertisement pga = null;

Object o = null;

while (advertisements != null &&

advertisements.hasMoreElements()) {

o = advertisements.nextElement();

if (o instanceof PeerGroupAdvertisement) {

pga = (PeerGroupAdvertisement)o;

Group go = new Group(myJxta, pga, group);

add(new GroupNode(go));

}

}

}

}

//该方法用于处理发现的所有的通告,advertisements用于返回所有发现的通告,将所有发现的通告一一列举出来,传递到函数里面,然后用一个循环来处理发现的所有通告。在循环体内,处理通告的方法是当循环未结束,就为每个通告创建一个对等组节点,加入到已有的对等组节点里面。

//首先创建一个MyJXTA实例,初始化对象

private void initialize() {

Group g = null;

setStatus(this.resources.getString("status.jxta.connect"));

//将对象的状态设置为连接

//新建一个对等组

try {

g = new Group(this, PeerGroupFactory.newNetPeerGroup(), null);

} catch (PeerGroupException pge) {

if (LOG.isEnabledFor(Level.ERROR)) {

LOG.error("Caught unexpected Exception", pge);

}

}

if (g != null) {

this.peerName = g.getPeerGroup().getPeerName();

this.preferencesManager = new PreferenceManager(this);

setStatus(this.resources.getString("status.jxta.start"));

String gid = Constants.getInstance().get(Constants.GROUP_ID, "").trim();

g.setVisible(gid.length() == 0);

joinGroup(g, false, false, gid.length() == 0);

initializeGroup(g);

this.preferencesManager.presetPreferences();

} else {

setStatus(this.resources.getString("error.jxta.start"));

}

}

//以上语句是对新建的对等组进行默认设置,设置对等组的缺省属性。然后调用initializeGroup方法进行对等组的初始化设置。下面定义了几个initializeGroup()的重载函数。

private void initializeGroup(Group parent) {

initializeGroup(parent, Constants.GROUP, "/@id");

}

private void initializeGroup(Group parent, String queryPrefix,

String queryPostfix) {

String prefix = queryPrefix != null ? queryPrefix.trim() : null;

String postfix = queryPostfix != null ? queryPostfix.trim() : null;

if (prefix != null &&

postfix != null) {

Constants c = Constants.getInstance();

for (Iterator gi = c.getAll(prefix + postfix).iterator();

gi.hasNext(); ) {

String gid = ((String)gi.next()).trim();

if (gid.length() > 0) {

String q = prefix + "[@id=\"" + gid + "\"]";

String gn = c.get(q + "/@name", Defaults.GROUP_NAME);

String gp = c.get(q + "/@password", null);

String gd = c.get(q + "/@description",

Defaults.GROUP_DESCRIPTION);

//设置对等组的ID,对等组名称,密码以及对该对等组的描述。

setStatus(this.resources.getString("status.group.create") +" " + gn);

Group g = null;

try {

PeerGroup ppg = parent.getPeerGroup();

PeerGroupAdvertisement pga =

PeerGroupUtil.create(ppg, gn, gd, gp,

(PeerGroupID)PeerGroupID.create(new URI(gid)));

g = new Group(this, ppg.newGroup(pga), parent);

} catch (PeerGroupException pge) {

LOG.error("Caught unexpected Exception",pge);

} catch (Exception e) {

LOG.error("Caught unexpected Exception",e);

}

//根据搜索到的对等组通告的属性,在本地创建对等组,parent参数用来指明该对等组的父//对等组

if (g != null) {

g.setVisible(true);//设置该对等组为可见

joinGroup(g, true, true, true);

initializeGroup(g, q, "/group/@id");

} else {

setStatus(this.resources.getString("error.group.create")

+ " " + gn);

}

}

}

}

}

GroupSearch首先必须做的是发现并加入MyJXTA,在加入这个对等组之后,它就能使用该对等组的服务。以上程序段中,它使用MyJXTA对象的发现服务来寻找对等组通告。发现通告的时间设置为三分钟,由于网络的不可预料性,因此没有办法知道找到一个通告需要多长时间。尝试的时间取决于网络环境。

因为是寻找对等组通告,因此要在getLocalAdvertisements()方法中使用DiscoveryService.GROUP类型。对等体通告的Name字段用来搜索对等组,任何本地缓存中的对等组通告类型,属性值对匹配,将通过该方法返回。如果找到这样的通告,那么任务

完成,从发现循环中退出。

如果本地缓存中没有找到通告,那么在MyJXTA对等组中通过getRemoteAdvertisements()方法发送发现请求,来寻找PeerGroup通告。由于对等体ID为空,因此发现请求将被传播到当前子网络的所有对等体上,以及知道的MyJXTA的汇聚对等体上。因为只有一个PeerGroup通告,因此该请求的阈值参数设置为1。

在发送了发现请求之后,要停一段时间再去检查缓存,看是否接收到一些响应。当接收到响应时,通告会被自动存储在本地缓存中。

如果三分钟之后还没有找到PeerGroup通告,将继续创建PeerGroup对等组。本地程序就可能使第一个试图加入PeerGroup的对等体,或者所有其它知道PeerGroup组的对等体可能关闭了或不可到达。

3.2.3 创建对等组

如果没有找到PeerGroup通告,就必须创建一个新的PeerGroup对等组。使用PeerGroup 类来创建对等组通告。这样会创建一个一般性的通告。它根据MyJXTA来自动设置对等组通告的所有属性。

然后可以把对等组通告传给MyJXTA的newGroup()方法。该方法将创建新的对等组,并把此信对等组的信息发送到JXTA网络。这样就发布了通告。NewGroup()方法是自动发布的。

如果对等组找不到PeerGroup对等组,那么就要创建相同的对等组。为了避免不同的对等体创建不同版本的对等组的情况,通过使用makeGroupID()方法和预定义的字符串,可以达到这一目标。

这样就完成了PeerGroup的实现。有了一个可以发现和创建PeerGroup对等组的服务。

Peer类代表要参与聊天的个人用户,跟上面GroupSearch一样,Peer首先发现并加入MyJXTA。Peer的joinGroup()方法的基本框架和GroupSearch中的非常相似,只是如果joinGroup()方法没有找到PeerGroup组,它将不会创建该对等组。如果程序没有找到现有的PeerGroup对等组,它将退出。

不能找到PeerGroup通告并不能说明没有PeerGroup对等体运行在JXTA网络上,而只是说明不能到达任何PeerGroup对等体。这可能因为没有等待应答返回足够长时间,或者找不到连接运行中的PeerGroup对等体的路径。

聊天客户Peer加入对等组的源代码如下:

public void joinGroup(final Group group, boolean autoStart, boolean discover,

boolean isInteractive) {

PeerGroup pg = group.getPeerGroup();

//首先获得要加入对等组的句柄

setStatus(this.resources.getString("status.group.join") + " " +

pg.getPeerGroupName());

this.view.setTitle(pg.getPeerName() + "@" + pg.getPeerGroupName());

PipeAdvertisement pa = PipeUtil.getAdv(pg,

Dialog.getDialogNamer(OneToOneCommandDialog.class).getDialogName(pg.getPeerName()), PipeService.UnicastType, null, true);

// pa获得要加入对等组的管道通告,管道服务的类型设置为UnicastType,该类型为单播型的,即点对点的,在管道上传送的消息将被送到单一的网络地址。

setStatus(this.resources.getString("status.group.display") + " " +

pg.getPeerGroupName());

addJxtaNode(new PeerNode(new Peer(pa), group), true);

//找到后,将peer节点加入到该对等组里面

restore(group);

if (discover) {

discover(group);

}

if (isInteractive) {

setStatus(this.resources.getString("status.dialog.many.register"));

String pn = Dialog.getDialogNamer(ManyToManyDialog.class).

getDialogName(pg.getPeerName());

pa = DialogManager.getInstance(group,pn,PipeService.PropagateType).getPipeAdv(pg);

//以上几行程序获得对等点的名字及管道通告。

addDialog(DialogManager.getDialog(ManyToManyDialog.class, group, pa, this));

setStatus(this.resources.getString("https://www.360docs.net/doc/ec8599380.html,mand.register"));

pn =

Dialog.getDialogNamer(OneToOneCommandDialog.class).getDialogName(pg.getPeerName());

setStatus(this.resources.getString("status.dialog.listener.add") +": " + pn);

DialogManager.getInstance(group, pn, PipeService.UnicastType).

addPipeListener(pg, new DialogPipeListener() {

public void receive(PeerGroup pg, JxtaBiDiPipe pipe) { DialogManager.getCommander(OneToOneCommandDialog.class,

group, pipe, MyJXTA.this);

}

//添加管道监听器,用以监听有没有对话请求。

public void receive(PeerGroup pg, Message msg) {}

});

pn = Dialog.getDialogNamer(OneToOneDialog.class).

getDialogName(pg.getPeerName());

setStatus(this.resources.getString("status.dialog.listener.add") +": " + pn);

DialogManager.getInstance(group, pn, PipeService.UnicastSecureType).

addPipeListener(pg, new DialogPipeListener() {

public void receive(PeerGroup pg, JxtaBiDiPipe pipe) {

addDialog(DialogManager.getDialog(OneToOneDialog.class,

group, pipe, MyJXTA.this));

}

public void receive(PeerGroup pg, Message msg) {}

});

setStatus(this.resources.getString("status.share.register"));

}

if (autoStart) {

setStatus(this.resources.getString("status.group.rendezvous.auto") +

": " + DEFAULT_AUTOSTART);

}

pg.getRendezV ousService().setAutoStart(autoStart, DEFAULT_AUTOSTART);

}

3.2.4 发现的主要优势

性能随着系统变老而提升的能力是JXTA网络的一个基本特色。聊天的对等体首次发现另外一个对等体时会花费一些时间。第二次会花费较少的时间,因为该对等体对先前的发现进行了缓存。这对对等体有益。

第四章聊天管道API的设计

4.1 管道在创建聊天室中的作用

聊天的用户找到并加入PeerGroup对等组之后,彼此之间就靠管道进行通信。由于JXTA 为管道提供了Java API的绑定,使得这种通信成为可能。管道是JXTA允许对等体之间彼此

进行通信的基本结构。想提供服务的对等体会创建一个管道,并向JXTA对等组发布一个通告。想使用服务的对等体在一个对等组中发现管道通告,然后通过该管道与该服务建立连接。

4.2 创建管道

4.2.1 创建管道步骤

要使两个聊天客户能够在PeerGroup对等组内进行通信,必须要添加一组管道。创建管道的方式在逻辑上与创建对等组的方法相同。本次设计中:

A.使用getLocalAdvertisement()方法在本地的缓存中搜索现有的通告,使用Discovery.AOV作为通告的类型。

B.如果没有找到所需的通告,就调用getRemoteAdvertisemeny()方法尝试着发现该通告。我们等待三分钟让查找程序继续执行,然后在本地缓存中看能否找到该通告。

C.如果仍然没有发现通告,那么必须创建一个通告,使用AdvertisementFactory类去构建该通告。然后在该通告中设置适当的信息,包括管道名,管道唯一的ID,以及管道类型。

D.在得到管道之后,我们将其发送到管道服务以实例化输入管道。PeerGroup在该管道上监听请求,稍后,PeerGroup必须创建一个输出管道,它在该管道上向特定的Peer发送响应。

实现的代码如下:

package net.jxta.myjxta2.util;

import net.jxta.discovery.DiscoveryListener;

import net.jxta.discovery.DiscoveryService;

import net.jxta.document.AdvertisementFactory;

import net.jxta.id.IDFactory;

import net.jxta.peergroup.PeerGroup;

import net.jxta.pipe.PipeID;

import net.jxta.protocol.PipeAdvertisement;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Enumeration;

import java.util.List;

public class PipeUtil {

public static final byte[] GROUP_CHAT_PIPE_ID = {

(byte)0xD1, (byte)0xD1, (byte)0xD1, (byte)0xD1,

(byte)0xD1, (byte)0xD1, (byte)0xD1, (byte)0xD1,

(byte)0xD1, (byte)0xD1, (byte)0xD1, (byte)0xD1,

(byte)0xD1, (byte)0xD1, (byte)0xD1, (byte)0xD1

};

//定义聊天用户组的网络ID地址

public static PipeAdvertisement getAdv(PeerGroup pg, String name,

String type, byte[] pipeId) {

return getAdv(pg, name, type, pipeId, false);

}

public static PipeAdvertisement getAdv(PeerGroup pg, String name,

String type, byte[] pipeId, boolean remote) {

PipeAdvertisement pa = searchLocal(pg, name);

if (pa == null) {

pa = createAdv(pg, name, type, pipeId);

publish(pg, pa, remote);

}

return pa;

}

//首先搜索本地管道通告,获得通告的各种参数,如果本地没有通告,就创建一个管道通告。并且对外发布该通告。

public static List getAdvs(PeerGroup pg, String name) {

List p = new ArrayList();

try {

for (Enumeration pas = pg.getDiscoveryService().

getLocalAdvertisements(DiscoveryService.ADV,

https://www.360docs.net/doc/ec8599380.html,Tag, name);

pas.hasMoreElements(); ) {

Object o = pas.nextElement();

if (o instanceof PipeAdvertisement) {

p.add((PipeAdvertisement)o);

}

}

} catch (IOException ioe) {}

return p;

}

//该方法将搜寻到的各个通告按照链表的方式组织,找到一个通告,就将其加入链表中

public static PipeAdvertisement searchLocal(PeerGroup pg, String name) {

PipeAdvertisement pa = null;

try {

for (Enumeration pas = pg.getDiscoveryService().

getLocalAdvertisements(DiscoveryService.ADV,

https://www.360docs.net/doc/ec8599380.html,Tag, name);

pas.hasMoreElements(); ) {

pa = (PipeAdvertisement)pas.nextElement();

if (pa.getName().equals(name)) {

break;

} else {

pa = null;

}

}

} catch (IOException ioe) {}

return pa;

//本方法的功能是搜寻远程的管道通告。首先开启通告的发现服务,然后搜寻远程的通告。

public static void discoverAdvs(PeerGroup pg, String name,

DiscoveryListener listener) {

DiscoveryService s = pg.getDiscoveryService();

s.getRemoteAdvertisements(null, DiscoveryService.ADV,

name != null ? https://www.360docs.net/doc/ec8599380.html,Tag : null,

name, 10, listener);

}

//该方法负责创建一个管道通告

public static PipeAdvertisement createAdv(PeerGroup pg, String name,

String type) {

return createAdv(pg, name, type, null);

}

//createAdv()方法的重载函数,用于创建管道通告,并且从通告名称,通告ID,通告的类型几方面对管道通告进行初始化设置。

public static PipeAdvertisement createAdv(PeerGroup pg, String name,

String type, byte[] id) {

PipeAdvertisement pa = (PipeAdvertisement)AdvertisementFactory.

newAdvertisement(PipeAdvertisement.getAdvertisementType());

pa.setPipeID(id != null ?

(PipeID)IDFactory.newPipeID(pg.getPeerGroupID(), id) :

(PipeID)IDFactory.newPipeID(pg.getPeerGroupID()));

pa.setName(name);

pa.setType(type);

return pa;

}

public static void publish(PeerGroup pg, PipeAdvertisement pa) {

publish(pg, pa, false);

}

//publish()方法的重载函数,用于等通告创建之后来发布通告,以使通告能够被发现和识别。

public static void publish(PeerGroup pg, PipeAdvertisement pa,

boolean remote) {

DiscoveryService ds = pg.getDiscoveryService();

try {

ds.publish(pa);

} catch (IOException ioe) {}

if (remote) {

// xxx: no remote publishing

// ds.remotePublish(pa, DiscoveryService.ADV);

}

}//pulish()方法用于发布通告,先要开启发现服务,然后发布通告

///////////////////////////////////////////////////////////////////////////////////////////package

net.jxta.myjxta2.dialog;

import net.jxta.myjxta2.util.PipeUtil;

import net.jxta.endpoint.Message;

import net.jxta.peergroup.PeerGroup;

import net.jxta.pipe.PipeMsgEvent;

import net.jxta.pipe.PipeMsgListener;

import net.jxta.pipe.PipeService;

import net.jxta.pipe.InputPipe;

import net.jxta.protocol.PipeAdvertisement;

import java.io.IOException;

import java.util.Iterator;

class PropogateDialogManager

extends AbstractDialogManager {

//记住管道,在必要时可以关闭它

private InputPipe pipe = null;

// PropagatePipeListener类监听管道消息事件并且将数据送到所有已经注册过的对话管道监听器,

private class PropagatePipeListener

implements PipeMsgListener{

//pg是监听器运行所在的对等组

private PeerGroup pg;

//创建一个新的PropagatePipeListener的对象

protected PropagatePipeListener(PeerGroup pg){

this.pg = pg;

}

// 当接收导管道消息事件时,该pipeMsgEvent()方法就被调用

public void pipeMsgEvent(PipeMsgEvent pme) {

Message msg = pme.getMessage();

for (Iterator l = getListeners(pg).iterator(); l.hasNext(); ) {

((DialogPipeListener)l.next()).receive(pg, msg);

}

}

}

public PropogateDialogManager(String name, String type) {

super(name, type);

}

//为特定的对等组PeerGroup初始化对话管理器DialogManager

public void initialize(final PeerGroup pg) {

try {

this.pipe = pg.getPipeService().createInputPipe(getPipeAdv(pg), // createInputPipe()方法用于创建输入管道

new PropagatePipeListener(pg));

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

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

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:客户端上显示的树形列表,以及可实现发送消息头像闪动等。三、调试数据 首先启动服务器端

聊天室系统设计报告

青岛科技大学操作系统课程设计 学生班级计算机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环境下的网络应用程序编程接口叫

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)// 验证用户名

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)关闭服务器:断开与网络的连接,彻底退出聊天室。

聊天室设计报告

网 络 聊 天 系 统 设 计 报 告 组长:靳子豪 组员:凯强、许玉军、王明明 完成时间: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 进行可行性研究的方法 成本效益分析、对估算问题的看法、软件的作用围、软件的成本估算、速度安排

网络编程_基于TCP的简易聊天室_实验报告

网络编程 课程设计说明书 题目名称:基于TCP/IP的网络文字聊天程序设计专业:网络工程

班级: 1201班 学号: 1220140105 姓名:蒋星 指导老师:利平 完成日期: 2014年12月13日

目录 一、实验基本信息概要3 1. 题目要求 3 2. 题目容3 3. 开发环境 3 二、流程图4 三、系统简介5 1.界面5 2. 软件功能 5 3. 系统设计 9 4. 优点与缺点9 四、系统详细设计11 1. ChatServer类11 2. ChatClient 类13 3. SocketException类15 5. 命令协议 15 6. 消息格式 16 五、系统测试16 1. 服务器使用错误16 2. 客户端使用错误17 3. 启动服务器17 4. 启动客户端17 5. 关闭客户端17 6. 启动服务器错误提示18 7. 公开聊天 18 8. 私聊 18 9. 错误的私聊19 10. 更名20 11. 帮助20 12. 非法指令20 13. 非法的指令参数20 14. 连接服务器失败21 六、心得体会21 七、完整代码21 Charserverd.cpp 服务器main函数文件 21 ChatServer.h 服务器类头文件 22 ChatServer.cpp 服务器类 23 ClientInfo.h 客户信息类 33 Charclientd.cpp 客户端main函数 34 ChatClient.h 客户端头文件34 ChatClient.cpp 客户端类 35 InitSock.cpp 初始化WINSOCK类41

SockException.h 异常类41八、[参考文献] 42

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

实验报告 | | 实验名称网络聊天室的实现 课程名称计算机操作系统 | | 目录 【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;} 以下是此程序的效果截图:

Java聊天室系统程序设计实验报告

Java聊天室系统程序设计 实验报告 题目:****** 院(系):****** 年级专业:****** 学生姓名:****** 指导老师:****** 开始时间:****** 完成时间:******

第一部分:课程设计总述 课程设计目的: 1.学会Java程序开发的环境搭建与配置,并在实际运用中学习和掌握Java 程序开发的全过程。 2.进一步熟悉掌握Java程序设计语言的基础内容,如用户图形界面设计、 Java多线程编程、Applet程序的设计、文件和网络输入输出流编程、Java 数据库编程等。 3.通过亲自动手写程序,一方面拓展知识面,一方面锻炼调试能力。 课程设计总体要求: 1.问题的描述与程序将要实现的具体功能。 2.程序功能实现的具体设计思路或框架,并检查流程设计。 3.代码实现。 4.程序测试(如程序代码、功能测试、可靠性测试和效率测试等)。 5.设计小结(包括) 课程设计题目: 目标 本软件是一个实用聊天程序。项目要实现以下目标: 1)允许用户注册; 2)允许注册用户登录聊天室; 3)登录用户之间进行聊天文件传输; 4)用户可以更改背景音乐; 用户信息的保存 本软件只是一个聊天室程序,所以用户只要打开程序就可以登录。本软件使用文本文件或者数据库来保存用户数据。 需求分析 对功能的规定

1.系统的用例图(对注册用户) 2.用户注册过程

3.用户登录过程 对性能的规定 由于本软件只是一个聊天室程序,程序只是提供用户之间的聊天和文件传输,故对网络传输数据要求不是很高,只要正常的传输速度就可以了。 需要管理的数据 用户的信息如下:用户名,密码,头像,电子邮件,地址。 4 开发环境 本软件采用Java语言编写,Java语言是一种跨平台的编程语言,所以本软件对操作系统没有特别的要求。而网络传输方面采用TCP/IP网络传输协议或者是RMI。

JAVA课程设计聊天室系统

Java课程设计指导书(学生版初稿) 第二章聊天室系统 目标 2.1 背景介绍 2.1.1 业务背景 2.1.2 技术背景 2.2 需求分析 2.2.1功能需求分析 2.2.2 业务对象分析 2.2.3 验收测试要求 2.3 系统设计 2.3.1 总体设计 2.3.2 详细设计 2.4 系统实现 2.5 小结 2.6 展望

第二章聊天室系统 学习目标: 1、理解基于网络的C/S模式的软件系统结构,掌握网络编程的基本概念。 2、了解Java 的多线程机制,掌握Java多线程技术的应用。 3、熟练掌握基于TCP协议的Socket编程。 4、了解Socket编程的协议约定,掌握简单应用协议的开发。 5、进一步巩固发展团队协作能力。 学习寄语:想必大家都用过QQ,其主要功能就是聊天,是不是很想知道它是如何实现的?本项目就是帮你实现一个简单的聊天系统,当然跟商业项目没法比,但从中你却可以了解这些系统是如何实现的,学到开发类似系统的基础知识和基本技能(基本并不意味不实用)。本章的内容有一定难度(多线程、基于TCP的应用协议编程),所以系统的开发采用了“增量迭代”的开发方式,由简易到繁难,希望你能顺利前行。我们的信念依然是:“不抛弃,不放弃”。你的改变和收获依然是老师真诚的期待,期待你更踏实、更自信。Come on!

2.1 背景介绍 2.1.1 业务背景 随着网络社会的不断发展,具有相同兴趣的网民需要互相远程交流,既要能省钱又要能即时交互,电话太贵、email又嫌慢,所以开发一个类似QQ 的及时通讯系统就变得非常有意义了。“Happy Chat”聊天系统应运而生,它较之QQ 的唯一好处是自主开发,用的放心,更适合在局域网内使用。它提供的功能远不如QQ丰富,但应具有如下功能:(1)与聊天室成员一起聊天;(2)可以与聊天室成员私聊;(3)用户注册、登录;(4)服务器监控聊天内容;(5)服务器发送通知;(6)服务器踢人;(7)保存服务器日志。(8)保存用户聊天信息。 2.1.2 技术背景 本系统要求使用java技术开发,使用文件保存数据,集成开发环境使用eclipse。开发者应有java程序设计语言、SWING基本GUI组件、多线程、文件使用、socket编程、使用eclipse的基本知识和技能。系统采用两层C/S体系结构,C端负责通过GUI与客户交互,实现注册、登陆、收发信息、退出等功能;S端是聊天系统的应用服务器,主要有处理用户注册、登录、用户收发信息、用户退出等功能。C端和S端是通过网络交互的,其基本原理如图1所示: 图1 C/S通讯基本原理图

网络编程 基于TCP的简易聊天室 实验报告

网络编程课程设计 -基于TCP的简易聊天室 一、实验基本信息概要 1.题目要求 熟悉异步网络编程的基本方法,掌握异步网络编程和网络协议设计的方法。要求采用select 模型、WSAAsyncSelect模型、WSAEventSelect模型、重叠模型或完成端口等模型完成编程任务。 2.上机要求 要求采用select模型、WSAAsyncSelect模型、WSAEventSelect模型、重叠模型或完成端口等模型完成下面的任务。 3.题目内容 内容概要:实现一个聊天室,支持多人聊天。也可以增加私聊等功能。 4.开发环境 操作系统:Windows 7 开发语言:C++ 集成开发环境:Microsoft Visual Studio 2010

二、系统简介 1.界面 本软件使用DOS控制台界面,界面风格较为朴素,没用使用复杂的颜色。但是对聊天时界面进行了一定的控制和修正使得界面较为美观,易读。 服务器: 客户端: 2.软件功能 本软件实现了聊天室基本的功能,包括公开聊天,私聊,获取在线用户,更改昵称,获得帮助等。

1)公开聊天 在光标处直接输入消息后按回车即为发送公开聊天,如下图所示。 2)私聊 使用命令【/m 对方UID 消息】即可发送私聊,私聊只有对方可以看到,如下图所示:客户端1,密聊UID为132的用户。 发送后 客户端2,UID为132的用户收到私聊消息。

3)获取在线用户列表 使用命令【/list】即可获得在线用户列表,用户列表会议系统消息的方式返回,如下图所示。命令 发送后 4)更改昵称 使用命令【/name 你的新昵称】即可立即更改昵称,成功修改后服务器会以系统消息的方式返回成功修改的提示。 命令

基于java的局域网聊天系统-课程设计报告

摘要 随着计算机网络技术的发展,各种各样基于网络的应用也随之诞生,比如基于互联网的信息发布,通信,数据共享等等。局域网的发展也同样迅速。很多政府机构,企业,学校,都是先以一个统一的局域网联结在一起,再分别接入INTERNET.因此基于局域网的即时通信工具,就这样应运而生了。本文利用JA V A的UDP编程以及SWING图形界面编程技术,在WINDOWS平台上实现了具有美观图形界面的局域网聊天软件. 在本实现内将客户端和服务端综合在一个程序之内,用多线程实现不同的并行任务。并模仿国内的QQ进行了人性化的界面设计,使用起来更加简单方便,并且功能十分合理、实用。 通过本局域网聊天软件可以实现一对一、一对多的聊天,可以实现不同用户不同的文字字体、风格、大小、颜色的发送和显示,提供发送表情、文件、好友间的抖动提示以及聊天记录的管理等功能。 关键词:局域网聊天;JA V A网络编程;UDP;多线程

LAN Chat System Development based on JAVA Abstract With the development of computer network technology, various kinds of applications based on network were born, such as the release of information, communication, data sharing based on the Internet and so on. The development of the LAN is also quick. Many government agencies, enterprises, schools, is the first in a unified network linked together, each with access to INTERNET. Thus Instant Communication Tools based on LAN were born. In this paper, by using JA V A UDP programming and SWING graphical interface programming technology, we can get a LAN chat software with beautiful appearance on the WINDOWS platform. In the implementation, the client and the server were integrated within a program, implemented with multithreading. And imitating the domestic QQ interface humanization design, using more simple and convenient, and the function is very reasonable, practical. Through our LAN chat software can achieve one to one, one to many chat, send different users’ different text font, style, size, color and display, provide the send of expression, file, the shake among friends and chat records management and other functions. Keyword: LAN Chat;JA V A network programming;UDP; multi-thread

Java聊天室课程设计报告

UML课程设计 题目网络聊天程序开发设计与实现 学号:201515614376 姓名:卫国辉 指导教师: 完成时间:2017年 12月

目录 1.摘要 (2) 2.绪论 0 2.开发环境 0 3.需求分析 (1) 3.1程序简介 (1) 3.2程序功能 (1) 4.系统设计 (2) 4.1概要设计 (2) 4.2详细设计 (2) 5.测试 (7) 6.结论 (9) 参考文献 (10)

摘要 本次训练主要是考查了对JA V A程序设计的综合运用,设计一个Socket 通信的聊天程序,用户可以通过程序进行聊天通信,但不支持用户自定义表情及图片的发送。 本程序设计也用到了一些相关的标准Java的类,给程序设计带来了许多的方便,但用那些要切记加相应的类的包,还有一些构造方法和个别接口方法。 本程序可以实现用户之间的一些简单的交互,虽然功能较少,但是我想通过这次程序设计来熟悉并且学习更多关于JA V A编程的东西,来便于以后可以使用。 关键词:java聊天

1.绪论 对于一个选择网络编程的人来说,必须要有足够的细心和耐心,因为编程一般来说是很枯燥的乏味的,而且程序会越来越复杂,它所用到的符号、标记很多,所以不能出点小错误的。还有,我们不能只是看程序,要学会把自己学的自己拿去实践,自己去编一些程序,培养自己的动手能力,掌握一些编程技巧,熟练运用自己学到的理论知识,这样在以后才能开发出属于自己的东西。 如今,随着科学技术的发展,计算机已成为了我们生活中必不可少的设备了,而掌握计算机知识和运用,又成了我们每一个人的目标了。现在IT行业的飞速发展,无不应正了以前、现在、将来计算机行业都是科学发展的主导行业。而这些基本上都建立在程序上的,所以程序员对计算机行业来说,可想而知有多么的重要了,他们所付出的每一滴汗水都将推动这个行业的发展。 现在我就用JA V A语言编写一个简单的程序——Java聊天程序。将所学的基本知识用到其中去,这里包括了构造方法,创建图形界面,引用类等等。这不仅能锻炼我的实践能力,同时也进一步复习和巩固了我所学的理论知识。对以前没有学好的还有督促和促进作用。而且,根据需要,还可以了解一些课外的知识。增加自己的知识面。 2.开发环境 在开发此聊天程序时,该项目所使用的软件开发环境如下: 操作系统:Windows 7 开发工具:eclipse3.2及其VE插件

相关文档
最新文档