电子商务前言文

1引言

随着计算机技术的不断发展,网络技术的普及范围越来越广,网络能够提供的服务多样,便捷,已经成为人们生产生活中不可缺少的重要组成部分.如今网络休闲游戏发展迅速,它凭借健康,方便,互动性强,益智等诸多优点,成为大部分现代人休闲娱乐的首选.

网络五子棋游戏是使用Ja语言开发的一款游戏.它使用SOCKET建立连接,多线程处理数据,以及可嵌入网络浏览器的APPLET作为客户端,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易.通过对该软件的编写,还可以巩固学生对以上各种知识的掌握和理解.


2JA语言概述

2.1JA简介

JA是SunMicrosystem公司开发的编程语言,是一个简单,面向对象,分布式,解释性,强壮,安全,与系统无关,可移植,高性能,多线程和动态的语言.

2.1.1JA的基本特点

(1)简单性

Ja与C++语言非常相近,但Ja比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件,预处理文件,指针,结构,运算符重载,多重继承以及自动强迫同型.Ja实现了自动的垃圾收集,简化了内存管理的工作.

(2)面向对象

Ja提供了简单的类机制和动态的构架模型.对象中封装了它的状态变量和方法,很好地实现了模块化和信息隐藏,而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案.

(3)多线程

多线程使应用程序可以同时进行不同的操作,处理不同的事件.在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作.

(4)分布性

Ja是面向网络的语言.通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便的访问其他对象.

(5)体系结构中立

Ja是一种网络语言,为使Ja程序能在网络的任何地方运行,Ja解释器生成与体系结构无关的字节码结构的文件格式.为了使Ja的应用程序能不依赖于具体的系统,Ja语言环境还提供了用于访问底层操作系统功能的类组成的包,当程序使用这些包时,可以确保它能运行在各种支持Ja的平台上.

(6)安全性

用于网络,分布环境下的Ja必须要防止病毒的入侵,Ja不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误.

2.1.2Ja中输入/输出流概念

过滤流DataInputStream和DataOutputStream除了分别作为FilterInputStream和FilterOutputStream的子类外,还分别实现了接口DataInput和DataOutput.接口DataInput中定义的方法主要包括从流中读取基本类型的数据,读取一行数据,或者读取指定长度的字节数,如readBoolean(),readInt(),readLine(),readFully()等.接口DataOutput中定义的方法主要是向流中写入基本类型的数据或者写入一定长度的字节数组,如writeChar(),writeDouble().DataInputStream可以从所连接的输入流中读取与机器无关的基本类型数据,用以实现一种独立于具体平台的输入方式,DataOutputStream可以向所连接的输出流写入基本类型的数据.

2.1.3Socket机制

Socket是面向客户/服务器模型设计的,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.客户程序可以向Socket写请求,服务器将处理此请求,然后通过Socket将结果返回给用户.

Socket通信机制提供了两种通讯方式:有联接和无联接方式,分别面向不同的应用需求.使用有联接方式时,通信链路提供了可靠的,全双工的字节流服务.在该方式下,通信双方必须创建一个联接过程并建立一条通讯链路,以后的网络通信操作完全在这一对进程之间进行,通信完毕关闭此联接过程.使用无联接方式时其系统开销比无联接方式小,但通信链路提供了不可靠的数据报服务,不能保证信源所传输的数据一定能够到达信宿.在该方式下,通信双方不必创建一个联接过程和建立一条通讯链路,网络通信操作在不同的主机和进程之间转发进行.

在ja中使用套接字相当简单,JaAPI为处理套接字的通信提供了一个类ja..Socket.使得编写网络应用程序相对容易.JA支持流套接字(streamsocket)和数据报套接字(datagramsocket).流套接字使用TCP(TranissionControlProtocol,传输控制协议)进行数据传输,而数据报套接字使用UDP(UserDatagramProtocol,用户数据报协议).

在Socket层实现的Ja网络程序是严格同步的.从一台机器发送数据的操作要求对应一个从其他机器接受数据的操作.

2.2JA工具

JDK

1)Ja编译器

Ja编译器将Ja源代码文件编译成可执行的Ja字节码.Ja源代码文件的扩展名为.ja,Ja编译器把这种扩展名的文件编译成扩展名为.class的文件.源文件中的每个类在编译后都将产生一个class文件,这意味一个Ja源代码文件可能编译生成多个class文件.

2)Ja解释器

Ja解释器对编译生成的字节码格式的可执行程序的运行提供支持,它是运行非图形Ja程序的命令行工具.

3程序设计开发

3.1程序设计思路

实现一个用户可以Inter上任何地方的不同机上进行游戏,使用多线程和网络套接字数据流的分布式五子棋游戏,根据要完成的功能,本程序采用多客户服务方式.服务器创建服务器Socket,始终处于监听等待状态.客户端是动作的发起者,何时发出申请由客户端决定.客户端向服务器发出申请,服务器给予响应,客户端发出申请后立即可从Socket通道去取服务方的结果.服务器接受两个客户端连接后开始一个线程,不断接受客户端发来的数据,并把处理后的数据传送给客户端.服务器可以创建任意多局(图3-1).

在对服务器与客户端的设计开发之前,为了使开发方便,将服务器与客户端之间用以通信的变量规定好.通过编写一个接口GameConstant(),在其中定义各个常量的值:

publicstaticintPLAYER1等于1,

publicstaticintPLAYER2等于2,

publicstaticintPLAYER1_WON等于1,

publicstaticintPLAYER2_WON等于2,

publicstaticintDRAW等于3,

publicstaticintCONTINUE等于4,

publicstaticintSTOP等于100,

publicstaticintGAMEPORT等于8000,

服务器和客户端在设计时继承接口GameConstant()里面的所有数据.

3.2服务器的设计与实现

为了使界面友好,服务器使用图形组件,创建成一个可以显示游戏信息的框架.在框架中创建一个包含文本区的滚动窗格,并在文本区显示游戏信息(图3-2).

图3-2服务器界面

Fig.3-2InterfaceofGame-server

要建立服务器,需要创建一个服务器Socket,并把它附加到一个端口上,服务器通过这个端口监听连接请求.端口标识Socket上的TCP服务.网络的类存放在ja.包中,引入包后通过实现一个ServerSocket的实例就可以创建一个服务器Socket,并把它附加到一个端口(GAMEPORT)上:

ServerSocketserverSocket等于newServerSocket(GA MEPORT),

然后,服务器使用下列语句开始监听连接请求:

Socketplayer1等于serverSocket.accept(),

Socketplayer2等于serverSocket.accept(),

服务器开始等待,直到客户提出连接请求.连接建立后,服务器通过数据输入流从客户端接收信息,并且通过数据输出流把相应的标记发送给客户端.

newDataOutputStream(player1.getOutputStream()).writeInt(PLAYER1),

newDataOutputStream(player2.getOutputStream()).writeInt(PLAYER2),

当客户端满足开局条件时,就开启一个线程处理客户之间数据,同时继续监听其它客户端的连接请求.

多线程是Ja的一个特点,多线程可以使程序反应更快,交互性更强,并能提高执行效率.创建一个新的线程的生命周期如下状态:新建,就绪,运行,阻塞,死亡.

在Ja中,提供了多种控制线程的方法,在服务器中用到的主要以下几种:

publicvoidrun()

Ja运行系统调用这个方法来执行线程.在用户线程类中,必须覆盖这个方法并且提供线程执行的代码.

publicvoidstart()

该方法启动线程,它引起对run()方法的调用.客户类中的可运行对象调用该方法.

服务器程序采用类HandleGame继承Thread类来实现对线程的调用,同时对run()方法覆盖.

以下是HandleGame()类里面主要的数据域和方法:

privatechar[][]cell:Char类型数组用来记录玩家的标记.

privateDataInputStreamisFromPlayer1,

privateDataOutputStreamosToPlayer1,

privateDataInputStreamisFromPlayer2,

privateDataOutputStreamosToPlayer2,

:四个数据流用来实现与两个玩家之间信息的传递.

publicHandleGame(Socketplayer1,Socketplayer2):

构造函数,两个参数用以接收传递过来的Socket对象.

publicvoidrun():对继承Thread类中的run()方法进行覆盖.

privatebooleanisFull():判断是否满格.

privatebooleanisWon(introw,intcolumn,chartoken):

判断新标记的单元格是否使一方获胜.

游戏局一旦建立起来,服务器便于工作交替地从客户端那里接收数据.从客户端接收到数据后,服务器判断游戏状态,并根据结果进行相关操作,直至游戏结束.

3.3客户端的设计与实现

客户端负责与玩家的交互.因此要创建一个界面,包括一个20*20的下棋区域,当玩家选定单元格或接收到别的玩家选定的单元格时,用不同的标记显示,两个显示游戏名称和游戏状态的标签和两个菜单栏上的按键用以进行控制,如图3-3:

图3-3客户端界面

Fig.3-3InterfaceofGame-client

这里客户程序设计成一个JaApplet,用户可以在Web浏览器里运行.当用户打开GameClient.文件时,浏览器调用init()方法对界面进行初始化.点击Start时开启一个线程和服务器连接,通过数据流进行数据交换.

connectToServer等于newSocket("localhost",GAMEPORT),

isFromServer等于newDataInputStream(connectToServer.getInputStream()),

osToServer等于newDataOutputStream(connectToServer.getOutputStream()),

下面是类GameClient的主要方法和数据:

publicclassGameClientextendsJApplet

implementsRunnable,ActionListener,GameConstants

{

privatebooleanmyTurn等于false,:标记是否轮到自己下棋

privatecharmyToken等于'',:标记自己的棋子

privatecharotherToken等于'',:标记对手的棋子

privateCell[][]cell等于newCell[20][20],:生成20*20个单元格

privateintrowSelected,:记录所选单元格的行

privateintcolumnSelected,:记录所选单元格的列

privatebooleancontinueToPlay等于true,

privatebooleanwaiting等于true,

:记录游戏进行中的状态

publicvoidinit():初始化用户界面,打开网页时由浏览器调用

publicvoidactionPerformed(ActionEvente):

覆盖ActionListener接口里面actionPerformed()方法,用来处理用户点击菜单栏引起的操作.

publicvoidrun()

覆盖Runnable接口里的run()方法,用以对游戏过程中的数据传输,处理,控制.

}

在客户程序的类中,由于它继承了Applet类,所以不能再通过声明Thread类的扩展来实现,只能通过实现Ja提供的一个Runnable接口,进行线程的创建和运行.Runnable接口的实现是非常简单的,它只包含run()方法,使用时只要将该方法覆盖.

从游戏设计来看,单元格是处理鼠标点击事件和显示标记的GUI对象.在这里使用的是面板,设置单元格Cell为JPanel的子类.将Cell类声明为内部类,可以直接使用GameClient类中定义的变量与方法,使程序简洁明了.

Cell类中包含以下主要数据和方法:

publicclassCellextendsJPanelimplementsMouseListener

{

privateintrow,

privateintcolumn,

privatechartoken等于'',

publicCell(introw,intcolumn){}:构造函数

publicvoidpaintComponent(Graphicsg){}:

Graphics对象g是由Ja运行系统自动创建,这个对象控制信息的绘制方式.可以使用定义在Graphics类中的多种画法绘制字符串的几何图形.

publicvoidmouseClicked(MouseEvente){}

publicvoidmouseExited(MouseEvente){}

publicvoidmouseEntered(MouseEvente){}

publicvoidmouseReleased(MouseEvente){}

publicvoidmousePressed(MouseEvente){}

:接口MouseListener中的方法.

}

3.4程序的运行

首先将编写好的程序使用Ja编译器编译,生成以class为扩展名的类文件,然后使用Ja解释器分别运行服务器和客户端.客户端发出连接,服务器接收后开启线程对游戏进行控制,游戏结束时关闭线程.具体流程如图3-4所示:

玩家一

初始化用户界面

向服务器请求连接,并从服务器获知所用棋子的标记.

从服务器得到开始标志.

等待玩家标记单元格,并向服务器发送单元格的行号和列号.

从服务器接收游戏状态.

如果状态是WIN,显示是胜者,如果玩家二获胜,接收玩家二的最后一步走棋信息.中断循环.

如果状态是DRAW,显示游戏结束,中断循环.

如果状态是CONTINUE,接收玩家二选定的单元格的行号和列号,标记玩家二选定的单元格.服务器

创建一个服务器套接字.

接收第一个玩家的连接请求,并且通知玩家他是玩家一,使用标记"X".

接收第二个玩家的连接请求,并且通知玩家他是玩家二,使用标记"O".启动对局线程.

处理对局:

告诉玩家一开始游戏.

接收玩家一选定单元格的行和列.

判断游戏状态(STOP,WIN,DRAW,CONTINUE).如果玩家一退出,向玩家二发送状态(STOP),退出.

如果玩家一获胜,给两个玩家都发送状态(PLAYER1_WON),并且向玩家二发送玩家一的走棋信息.退出.

如果状态是CONTINUE,通知玩家二轮他走棋,并且向玩家二发送玩家一最新选定单元格的行和列.

接收玩家二选定的单元格的行和列.

如果玩家二退出,向玩家一发送状态(STOP),退出.

如果玩家二获胜,给两个玩家都发送状态(PLAYER2_WON),并且向玩家一发送玩家二的走棋信息.退出.

如果状态是CONTINUE,发送状态,并且向玩家一发送玩家二最近选定的单元格的行和列.玩家二

初始化用户界面

向服务器请求连接,并从服务器获知所用棋子的标记.

从服务器接收游戏状态.

如果状态是WIN,显示是胜者,如果玩家一获胜,接收玩家一的最后一步走棋信息.中断循环.

如果状态是CONTINUE,接收玩家一选定&# 30340;单元格的行号和列号,标记玩家一选定的单元格.

等待玩家标记单元格,并向服务器发送单元格的行号和列号.

图3-4运行流程

Fig.3-4FlowChart

4小结

随着计算机和网络技术的不断发展,信息技术给人们带来的帮助越来越大,单独一台计算机已经不能满足人们的需求,网络正在成为大多数人群生产,生活中密不可分的一部分.Ja作为一种分布式和可移植的计算机语言,在网络软件开发上有着特别的优点.它开发方便,快捷,安全性高,对以往复杂的功能,尤其是网络通信等方面,实现起来简洁明了,在网络编程领域有着巨大的发展潜力.在当今网络经济飞速发展的时代,Ja技术的平台无关性,可重用性,模块化等特点大大减少了重复劳动,无论是开发用于Inter浏览的网站还是功能复杂的网络应用系统,Ja都可以提供有力的支持.相信只要合理地利用Ja技术,必定可以在电子商务,大型网站建设中发挥日益重要的作用.

网络五子棋游戏

青岛科技大学本科综合课程设计论文

-12-

-11-

服务器

游戏局1

游戏局N

客户端1

客户端2

客户端M

客户端N

图3-1系统框架

Fig.3-1FrameofSystem

类似论文

电子商务前言文,电子商务专业毕业设计

电子商务行业CEO调查报告一、前言: 在2016年全球经济冬天大环境下,中国的电子商务企业境况如何阿里巴巴,网盛科技,慧聪等以B2B为核。
更新日期:2024-5-28 浏览量:72514 点赞量:16872

我国电子商务学文开题报告

我国电子商务相比于美国等发达国家起步较晚,但随着电子商务的逐步发展和各项有利措施的不断出台,我国网上交易已经。
更新日期:2024-4-2 浏览量:10697 点赞量:3703

电子商务的文大纲范文

范文1 绪论1 1 1课题研究的背景与意义1 1 2电子商务物流相关理论概述3 2 研究文献综述5 2 1电子商务相关文献5 2 2电子商务对物流的。
更新日期:2024-12-22 浏览量:154966 点赞量:32770

电子商务毕业文的格式与要求

一、撰写毕业设计(论文)的目的:学生进行毕业设计(论文)目的是培养学生综合运用所学的基础理论、专业知。
更新日期:2024-3-21 浏览量:45323 点赞量:10834

电子商务毕业文选题

电子商务毕业论文选题电子商务毕业论文(设计)是电子商务专业学校教育的最后一个环节,是对整个专业学生知识技能的。
更新日期:2024-12-3 浏览量:19411 点赞量:5106

电子商务毕业文开题报告范文

题目:电子商务环境下物流配送系统的能力提升策略研究目录第一章选题背景和意义1第一节选题背景1第二节问题的提出2第三。
更新日期:2024-5-23 浏览量:70330 点赞量:15961

电子商务专业文题目成都

2016届税收学专业毕业论文选题指南 个人所得税税率形式研究 个人所得税征管机制研究 个人所。
更新日期:2024-9-23 浏览量:118774 点赞量:25583