从零开始Java游戏开发_第1页
从零开始Java游戏开发_第2页
从零开始Java游戏开发_第3页
从零开始Java游戏开发_第4页
从零开始Java游戏开发_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java游戏開发

學习情境7:网络對弈程序08游戏3-2目的与任务目的:為游戏添加网络通信功能和游戏逻辑,运用Socket進行网络通信,C/S架构服务器端和客户端编写,B/S架构实現。任务:開发网络對弈程序目的程序完毕项目開发:程序运行時,有两個客户端通過网络進行對奕。學习過程环节壹:先完毕简朴的C/S架构环节二:再完毕第二個例,实現壹种服务器与多种客户端通信环节三:再為服务器端创立线程,实現多线程服务器环节四:最终加入分析两客户端通信的信息,实現游戏规则的代码网络通信基础网络通信就是通過某种措施让壹台计算机与其他计算机互换数据。通信就是給其他计算机传数据,或者接受其他计算机发来的数据。對网络的任何形式的访問最终都归結為從网卡接受数据或向网卡传送数据。网络通信处理两個問題:(1)怎样识别不壹样的计算机。(2)怎样传送数据。网络通信問題网络中的两台计算机靠协议進行通信网络中用IP標识不壹样的通信实体IP:10IP:08httpftpmail网络协议在两台電脑间传送数据時,传送或接受数据的先後次序,数据的格式等内容的约定构成通信的协议。Internet网的数据传送有诸多协议,如TCP/IP,UDP,FTP等,协议不壹样,详细到网络通信程序,接受和发送数据部分的代码會有不壹样。本次的例子都是采用TCP/IP协议。用IP识别网络中的计算机网络上不壹样的计算机用IP来標识。实际上壹种IP對应壹张网卡。假如壹台電脑上有多张网卡,那么就需要多种IP来標识每壹张网卡。每個网卡有多种端口,供应用程序采用不壹样的通信协议传播数据。每种协议都采用不壹样的端口号,端口号可以设置,如设置某网卡用8080号端口進行TCP/IP协议方式的数据传播。网络程序的架构壹般网络上程序都是壹种服务器,壹种客户端,這种程序的总体构造叫架构,如上图所示這种总体构造叫C/S架构(即客户/服务器)架构。C/S架构中,提出数据访問规定的程序叫客户端,被提出数据访問规定的程序叫服务器端。壹种客户端也許是壹台配置很高的電脑,壹种服务器端也許只是壹台壹般電脑。客户端和服务器端可以是同壹台電脑。CSCSCS网络编程工具网络很普遍,因此,几乎所有的编程語言都提供网络编程的组件。Java提供Socket组件供网络编程使用。Socket是壹种类。在用Java進行网络编程時,只需使用Socket的有关措施,按照壹定环节编写出接受数据,处理数据,或处理数据,发送数据的代码即可。JavaSocket编程实际上网络编程简朴的理解就是两台计算机互相通讯数据而已,對于程序员而言,去掌握壹种编程接口并使用壹种编程模型相對就會显得简朴的多了,JavaSDK提供某些相對简朴的API来完毕這些工作。Socket就是其中之壹,對于Java而言,這些API存在于這個包裏面,因此只要导入這個包就可以准备网络编程了。Socket编程环节Java提供了對TCP套接字的良好的支持,有两种套接字类:.Socket;.ServerSocket;當编写连接到已經有服务的客户端软件的時候使用Socket类。當编写绑定到當地端口以提供服务的服务器软件的時候使用ServerSocket类。這是与DatagramSocket的UDP工作方式不壹样的地方--在TCP中,连接服务器地和從客户端接受数据的函数被分為两個独立的类。Socket编程环节Java中Socket可以理解為客户端或者服务器端的壹种特殊的對象,這個對象有两個关键的措施,壹种是getInputStream措施,另壹种是getOutputStream措施。getInputStream措施可以得到壹种输入流,客户端的Socket對象上的getInputStream措施得到的输入流其实就是從服务器端发回的数据流。GetOutputStream措施得到壹种输出流,客户端Socket對象上的getOutputStream措施返回的输出流就是将要发送到服务器端的数据流,(其实是壹种缓冲区,临時存储将要发送過去的数据)。Socket编程环节要完毕這個工作,需要完毕三個部分的工作,如下依次阐明:

1、建立服务器类2、建立客户端代码3、建立顾客界面1、建立服务器类创立服务器對象:ServerSocketserver=newServerSocket(9998)建立壹种Socket连接:Socketincoming=server.accept()输入流和输出流:BufferedReaderin=newBufferedReader(newInputStreamReader(incoming.getInputStream()));

PrintWriterout=newPrintWriter(incoming.getOutputStream(),true);

随即,就可以使用in.readLine()措施得到客户端的输入,也可以使用out.println()措施向客户端发送数据。关闭這两個数据流out.close();in.close();2、建立客户端代码创立壹种Socket對象:Socketsocket=newSocket("2",9998);数据的输入和输出in=newBufferedReader(newInputStreamReader(socket.getInputStream()));

out=newPrintWriter(socket.getOutputStream(),true);项目关键:简朴的C/S架构客户机/服务器的經典通信過程:

1、服务器监听對应端口的输入;

2、客户机发出壹种祈求;

3、服务器接受到此祈求;

4、服务器处理這個祈求,并把成果返回給客户机;

5、反复上述過程,直至完毕壹次會话過程。项目关键:简朴的C/S架构服务方:importjava.io.*;import.*;publicclassMyServer{

publicstaticvoidmain(String[]args)throwsIOException{

ServerSocketserver=newServerSocket(5678);

Socketclient=server.accept();

BufferedReaderin=newBufferedReader(newInputStreamReader(client.getInputStream()));

PrintWriterout=newPrintWriter(client.getOutputStream());

while(true){

Stringstr=in.readLine();

System.out.println(str);

out.println("hasreceive....");out.flush();

if(str.equals("end"))

break;

}client.close();

}}项目关键:简朴的C/S架构這個程序的重要目的在于服务器不停接受客户机所写入的信息只到,客户机发送"End"字符串就退出程序,并且服务器也會做出"Receive"為回应,告知客户机已接受到消息。项目关键:简朴的C/S架构客户机代码:import.*;importjava.io.*;publicclassClient{

staticSocketserver;

publicstaticvoidmain(String[]args)throwsException{

server=newSocket(InetAddress.getLocalHost(),5678);

BufferedReaderin=newBufferedReader(newInputStreamReader(server.getInputStream()));

PrintWriterout=newPrintWriter(server.getOutputStream());

BufferedReaderwt=newBufferedReader(newInputStreamReader(System.in));while(true){

Stringstr=wt.readLine();

out.println(str);

out.flush();

if(str.equals("end")){break;

}

System.out.println(in.readLine());

}

server.close();

}}项目关键:简朴的C/S架构客户机代码则是接受客户键盘输入,并把该信息输出,然後输出"End"用来做退出標识。

這個程序只是简朴的两台计算机之间的通讯,假如是多种客户同步访問壹种服务器呢?你可以试著再运行壹种客户端,成果是會抛出异常的。那么多种客户端怎样实現呢?壹對壹的C/S壹种Server壹种Client壹對多的C/S壹种server多种ClientCSCSCSCC功能扩展:将客户端改成JavaApplet,即B/S架构,為客户端设计符合需求的GUI。网络通信模型B/S架构:假如客户端是浏览器,则通信程序的架构叫浏览器/服务器架构(即Browser/Server架构,简称B/S架构)。客户端是通用的浏览器,省掉了客户端升级的麻烦。BSBB功能扩展:将服务器端改善為

多线程服务器壹种服务器為多种客户端服务其实,简朴的分析壹下,就可以看出客户和服务通讯的重要通道就是Socket自身,而服务器通過accept措施就是同意和客户建立通讯.這样當客户建立Socket的同步。服务器也會使用這壹根连线来先後通讯,那么既然如此只要我們存在多条连线就可以了。那么我們的程序可以变為如下:功能扩展:将服务器端改善為

多线程服务器改善為多线程服务器:

try{file://建立服务器

ServerSocketserver=newServerSocket(9998);

inti=1;

for(;;)

{

Socketincoming=server.accept();

newServerThread(incoming,i).start();

i++;

}

}catch(IOExceptionex){ex.printStackTrace();}功能扩展:将服务器端改善為

多线程服务器這裏仅仅只是加了壹种外层的While循环,這個循环的目的就是當壹种客户進来就為它分派壹种Socket直到這個客户完毕壹次和服务器的交互,這裏也就是接受到客户的"End"消息.那么目前就实現了多客户之间的交互了。功能扩展:将服务器端改善為

多线程服务器不過.問題又来了,這样做虽然处理了多客户,可是是排队执行的。也就是說當壹种客户和服务器完毕壹次通讯之後下壹种客户才可以進来和服务器交互,無法做到同步服务,那么要怎样才能同步到达既能互相之间交流又能同步交流呢?很显然這是壹种并行执行的問題了。因此线程是最佳的处理方案。功能扩展:将服务器端改善為

多线程服务器那么下面的問題是怎样使用线程.首先要做的事情是创立线程并使得其可以和网络连线获得联络。然後由线程来执行刚刚的操作,要创立线程要么直接继承Thread要么实現Runnable接口,要建立和Socket的联络只要传递引用就可以了.而要执行线程就必须重写run措施,而run措施所做的事情就是刚刚單线程版本main所做的事情,因此我們的程序变成了multiThread.java

应用升级:网络對奕游戏本程序实現的是基于B/S模式的网络對奕游戏,实現了多线程编程,实現多客户對奕。并且实現了服务器端管理客户端的功能,包括客户端和服务器端。实現功能:·顾客上线·包括新顾客上线和已使用過该系统的顾客上线·每位在线的顾客将會收到该顾客上线的告知应用升级:网络對奕游戏该顾客會收到所有已在线的顾客的信息·朋友下线服务器端删除该顾客信息·每位在线的顾客将會收到该顾客下线的告知,同步删

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论