概述
FLASH + JAVA 开发实时网络游戏[编程基础篇] with Socket API
(彩色狐狸【ColorFox、changsir】 : changsir@163.com QQ: 146646)
本文只要分两部分:FLASH编程 和 Java编程,此文记录的仅仅是我在探索中的一些收获,
其中用了很多个人化的描述语言,并不是业界标准的用语。 :)
探索笔记:
目前国内Flash应用大部分还是在制作精美的动画方面,但据我了解早在Flash4 的时代,国外一些
人就已经开始将flash技术运用于开发动态网站(和php、asp、jsp结合)和开发应用程序(象网络游戏、
远程管理等应用软件)的项目中了。而直到今日,这方面在国内发展还是比较缓慢(有一部分原因是少数
人掌握了关键技术,但不愿意共享出来)。因此,我将致力于推动国内flash技术在开发动态网站和开发应
用程序方面的发展,并将自己亲手写的代码公布到网络中,以便于大家共享、交流。 于2003-10-24
涉及到的知识范畴:
1. socket概念
2. java编程语言
3. Flash MX ActionScript中的XMLSocket
实时网络游戏也属于大型应用程序范畴,一个关键环节就是建立实时主动通信环境(相对的,有个称为被动通
信的方式,最好的例子就是你正在用IE浏览器浏览一个网站,此时浏览器和服务器之间就是被动通信方式:如
果你不点击一个连接,发送一个WEB页面请求到WEB服务器,WEB服务器是不会主动向你的浏览器发送任何页面
的)。在此Socekt API就成为了首选。限于篇幅,这里不再过多解释socket的含义,只希望大家能记住一点,
只要建立能够实时通信的应用程序就需要建立socket连接。
【 FLASH编程部分 】
从mx自带的as字典中可以看出,Flash在网络通信方面得到了非常大的加强。
“The XMLSocket object is useful for client-server applications
that require low latency, such as real-time chat systems”
注意最后的一小段话:such as real-time chat systems(译文:例如实时聊天系统)
通过调用XMLSocket方法FLASH就可以和一些由强大语言编写的服务器应用程序进行
通信,进而开发出各种实时信息交流系统。所以我们的目标锁定在XMLSocket!
另外值得注意的是:有很多人一看到XMLSocket前面的XML三个字母,就觉得头疼,
以为必须先熟悉甚至精通XML才能使用这个对象及其方法,但我要说的是在你不太了解
XML的阶段,只要把XML信息看成是一个随意长度(>0)的字符串,把XMLSocket看成是一个只是
用来发送字符串数据的对象就好办多了。
我们还是从分析代码着手,来跨进开发FLASH实时网络游戏的大门吧:
//建立XMLSocket对象
var mySocket = new XMLSocket();
mySocket.connect(”127.0.0.1″,3000);
//========== 测试建立socket连接是否成功 ==========================
mySocket.onConnect = function(success)
{
if(success)
{
_root.ifconnectok = “ok”;
trace(”connect ok”);
}
else
{
_root.ifconnectok = “failed”;
trace(”connect failed”);
}
}
//====== End for 测试是否连接成功 =============================
//成功建立连接后 向服务器端发送一个测试用的字符串,以便服务器端能显示出信息。
mySocket.send(”this is a testing String !!!”);
FLASH中的程序就先到此,因为是基础篇,所以不会涉及太多的其他东西,呵呵。
【 java程序部分 】
import java.io.*;
import java.net.*;
public class LocalServer
{
protected int listenPort = 3000;
public void acceptConnections()
{
try
{
ServerSocket server = new ServerSocket(this.listenPort);//同客户机的Socket对应,在服务器端,我们需要ServerSocket对象,参数是兼听的端口号
Socket incomingConnection = null;//创建一个客户端的Socket变量,以接收从客户端监听到的Socket
handleConnection处理
System.out.println(”Server端正在等待一个socket连接……”);
incomingConnection = server.accept();//调用该 ServerSocket 的 accept() 来告诉它开始侦听
System.out.println(”一个socket客户端已经连接过来……”);
handleConnection(incomingConnection);
} catch (BindException e) {
System.out.println(”Unable to bind to port ” + listenPort);
} catch (IOException e) {
System.out.println(”Unable to instantiate a ServerSocket on port: ” + listenPort);
}
}
public void handleConnection(Socket incomingConnection)
{
System.out.println(”r正在对此连接进行处理……”);
try
{
//首先获取同Socket相关联的流outputToSocket和InputStream
//其中outputToSocket是要返回给客户端Socket的流
//InputStream是客户端发来的请求,在这里就是文件路径,即”RemoteFile.txt”
OutputStream outputToSocket = incomingConnection.getOutputStream();
InputStream inputFromSocket = incomingConnection.getInputStream();
BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputFromSocket)); //首先要将InputStream转换到BufferedReader中
String line = null;
while ((line = streamReader.readLine()) != null)
{
System.out.println(line); //从streamReader中读出文件信息,直接输出到默认输出设备中(本例中是指dos窗口)
}
System.out.println(”rr接受信息完毕!”);
//完成之后关闭所有流,注意关闭Socket流的顺序
streamReader.close();
} catch (Exception e) {
System.out.println(”Error handling a client: ” + e);
}
}
//主程序,建立sever实例对象,然后运行对象的acceptConnections()方法
public static void main(String[] args) {
LocalServer server = new LocalServer();
server.acceptConnections();
}
}
java服务端程序就到此为止了,此时已经能够建立起一个最简单的C/S结构通信体系。
在此基础上再增加适当的东西 就能够开发出任何应用程序或者网络游戏。
##### 所要源码请发信到changsir@163.com 并在来信开头著名[网络游戏源码] #######
##### 下次想写一点FLASH+JSP+SqlServer 开发论坛的文章,希望大家多多与我交流 #####
俺最近也在关注这方面的内容,可惜俺是用php的,mark先
呵呵,Flash只是实现一个界面,真正的功能都是靠java、ASP、PHP、JSP等等这些技术实现的,
Flash只是一个壳子,现在讨论的也是外部壳子与内部功能的联接方法,说穿了也没什么难的,重点是在内部功能实现这一块,真要探讨一点深入的东西还是得精通java、ASP、PHP、JSP等等这些技术
不是说少部分人不愿意共享导致了发展缓慢,而是大部分学flash的人都不太了解java、ASP、PHP、JSP,达不到那个水平,
像楼主这样的全才很少,听课,学习!
两手到要硬,少不了的
php的socket server部分(手册上搞来的) :
<?php
error_reporting (E_ALL);
/* Allow the script to hang around waiting for connections. */
set_time_limit (0);
/* Turn on implicit output flushing so we see what we’re getting
* as it comes in. */
ob_implicit_flush ();
$address = ‘127.0.0.1′;
$port = 3000;
if (($sock = socket_create(AF_INET, SOCK_STREAM, 0)) === false)
{
echo “socket_create() failed: reason: ” . socket_strerror($sock) . “”;
}
if (($ret = socket_bind($sock, $address, $port)) === false)
{
echo “socket_bind() failed: reason: ” . socket_strerror($ret) . “”;
}
if (($ret = socket_listen($sock, 10)) === false)
{
echo “socket_listen() failed: reason: ” . socket_strerror($ret) . “”;
}
do
{
if (($msgsock = socket_accept($sock)) === false)
{
echo “socket_accept() failed: reason: ” . socket_strerror($msgsock) . “”;
break;
}
/* Send instructions. */
$msg = ” Welcome to the PHP Test Server. r” .
“To quit, type ‘quit’. To shut down the server type ’shutdown’.r”;
socket_write($msgsock, $msg, strlen($msg));
$cmd = “”;
do {
if (false === ($buf = socket_read($msgsock, 4096)))
{
echo “socket_read() failed: reason: ” . socket_strerror($ret) . “”;
break 2;
}
if ($buf == “r”)
{
if ($cmd == ‘m00′)
{
socket_write($msgsock, “PHP replies: Must be a cow out there…r”, strlen (”PHP replies: Must be a cow out there… “));
}
if ($cmd == ‘quit’)
{
socket_write($msgsock, “rClosing connection …”, strlen (” Closing connection …”));
break;
}
if ($cmd == ’shutdown’)
{
socket_write($msgsock, “rShutdown initiated…”, strlen (” Shutdown initiated…”));
socket_close ($msgsock);
break 2;
}
$cmd = “”;
}
else
{
$cmd .= $buf;
//echo($cmd);
}
} while (true);
socket_close ($msgsock);
} while (true);
socket_close ($sock);
?>
测试ok
而现在看到的FLASH+ASP比较多一点吧..象国外的网站很多都已经做到这一点了.可是在国内的确很少.
我觉得在国内这些东西的教程还是太少了.我想找也非得上外国网,可是全是E文,只是猜.唉.觉得太慢了..有机会大家学习一下.
changbird (彩色狐狸)
老兄,不错,好文章,我喜欢。
希望,多多宜善啊。
研究中,UP
不好意思 今天上来晚了 呵呵 主要是公司的网太破! 全层居然用一个adsl!(我$%@^@&*@)
我发帖子的目的主要有下面几个:
(1)最重要的就是抛砖引玉,启发一下想在这方面做出尝试的朋友
(2)想看看有多少人有兴趣
(3)找到一些志同道合的人 :)
to mindsky(新花泽类) :完全同意你的观点
to:SEASKYLONG(☆特☆) : 我会多写一些研究的心得出来,供大家参考,比如用flash+asp写论坛、FLASH+java开发实时网络游戏、FLASH+jsp或者PHP做的全站程序。 :)同时公布我的全代码
to volca() :感谢你能共享php方面的东西 :)
欢迎大家继续讨论!!!!
高手啊
顶一下
特别想学网络flash游戏的编写
现在ColdFusion出来了,有没有人想过或正在研究FLash+ColdFusion,岂不更爽?
我就正在作一个这个搭配的网络游戏.不是很大型,但是,就目前来看,(可能是Flash+ASP等的技术参考较少),ASP等+Flash的方案,好像问题还不少.最主要是安全性.
我想ColdFusion+Flash才真的叫匹配!这样,开发大型应用,有CF最后台,就更爽了.
网络的应用分为mvc,”界面”–“逻辑”–“控制”,
flash只是一个外客,可以把页面做得好看,要做大还得把后台应用处理做好才可以。
前段用 ie中的网页,flash,或一个客户段意义不大(不过国外结合很好,做出来好看又好用也不错)。(我个人感觉flash就象一个c/s模式的客户段,不过只是被ie集成了)
现在2k4对后台数据库的支持很好啊,flash连数据库是越来越方便了啊!
我以前也有这方面的想法,但现在……
前段时间也花了点时间研究ASP+FLASH,不过没办法编程基础太差,只能实现一些小型的数据读写,如果想结合flash的动态界面效果做出真正好的系统出来,语言基础是必要的,当然精通一种语言是最基本的,至于flash的界面设计完全属于视觉范畴,两方面要结合得很好的话,团队合作才是更好的方式。
很好的文章,我就把它置顶,欢迎大家都来看看
好啊。。
大家勇跃点啦
我觉得Flash不仅仅是外壳,就象我们在做网页的时候经常要用到Javascript,但Javascript不仅仅只是用来做界面效果的,它还有更强大的数据处理功能,Flash也一样,他可以提供更强大的客户端服务,然后再与服务器进行数据通信。当然我觉得,Flash开发网络应用时,安全问题也是要考虑的,我觉得Flash本身很难加强安全性,这也只可以在服务器上加强了。
我是Flash2004+C# Socket的,MSN coolthor@msn.com
其实这些flash结合php jsp asp的书籍资料还是不少的!
我就有幸得到一本flash+php开发指南的书!清华大学出版社!
不过好像是外国人写的国人翻译的而已!
我学的是asp+flash,参考了一下这本书 感觉受益匪浅!
国人真的比不上老外吗?我想不是,就像黑客与我们一样,只是他们掌握了一些我们所还不了解的知识,这也如此,我正在策划一网络游戏,而且用的就是FLASH+ASP,这个游戏主要是反映网络人生活的,当然由于一些原因,我现在还不能说得很多,我希望通过此论坛能让国人的FLASH水平更上一个台阶,在我看来,用FLASH开发软件觉不会比其他的编程语言差!
我同意楼上的;
我们要加油哦~
好,期待。。。
FLASH+JAVA有搞头没?
我有FALSH一年专业经验,JAVA两年专业经验
放在一起没搞过
请问一起搞在北京值几个钱?
有专搞JAVA吃香么
上边的朋友。。不要总想着IT=”挨踢”
贴主在这里提出的是一种思想和理论。。
我赞同贴主的观点。。而且flash+后台服务器是很好的选择。
不过建议贴主,能够把。。实现网络多线程的贴字贴出来。。完善上边的服务器功能。
好贴
to thornet(THOR) :
I’m developing in the same environment as yours. ( c# socket server + flash mx 2004)
up
收藏一下
flex
不知道有没有写错
将会在明年出来
到时FLASH与JAVA的结合更紧密
大家应该看到FLASH2004有可以专门建FLASHJSP文件了吧
全力支持楼主!
在闪客帝国也看到类似的文章
不知道哪个是原创
总之受益匪浅
以前做过一个asp图形界面的小game,仿口袋妖怪的,效率太底,放弃了,flash解决图形应该是个不错的选择,关注!!
关注!
这段时间正想着要好好深入学习+研究一下Java应用程序开发,过段时间有点感觉了找楼主好好探讨探讨Flash+Java的深入应用…
好文章
一扇窗
不好意思,最近在赶一j2ee的项目,又好久没来论坛研究啦。
to iamwls(灵鹤): 我觉得现在国内大的形式还没有发展到FLASH与java、C等结合做应用这方面上来,所以搞flash+java 并不能比专搞java赚更多的钱。不过咱们应该做急先锋,带动国内这方面的发展。
to Keng(白朗):首先谢谢理解和支持,呵呵。我在发表这个帖子之后的几天里面,确实写了一套简单的java服务器端程序,基于多线程,不过还没经过优化,会在近期放上来。不过因为这里是讨论flash的板块,所以如果我贴上来java的程序,好像有点文不对题的感觉,呵呵 所以我也有些犹豫。
介绍一下写这套程序的背景:写这套服务器端程序,是因为当时公司要求做一个实时监视公司数据库中数据变化的工具,所以就临时赶做了一个,当然,客户端用的是纯flash。
to jinshiyin(金世饮): 恩,我也看到2004的变化很大了,但由于参加项目的原因,暂时没时间研究,不过希望大家多讨论。 :)另:帝国论坛上的那篇文章也是我本人发的 呵呵,目的都说了,只是希望通过我的帖子,能带动国内这方面的发展,也顺便多结识朋友。 呵呵
to mostro(祥子): 我2年前用flash5+asp帮朋友做过一个纯flash的石器时代的网站,呵呵感觉flash要是仅仅和asp,jsp,php这类web语言结合的话,做实时的东西还是力不从心,比如网络游戏。我还是建议flash+java或C 这类的高级语言编写的应用程序结合。
to reagan0127(reagan):欢迎找我讨论,不过更希望大家都参与进来。 呵呵 人外有人,这里高人很多的哦,我只是按捺不住了蹦出来献丑罢啦。 :)
to mckee(keesprint): 呵呵我发这个帖子就是想捅破这层窗户纸。因为我知道FLASH方面的高手和Java、C方面的高手很多很多,而且也有很多人早就想用FLASH结合Java、 C等做一些东西了,但就是不太了解flash怎么和java、c进行通信。所以只好由小弟来捅一下试试,看看能不能捅破。 ^O^
0恩
我昨晚看的时候就是有种大开眼界的感觉。说来惭愧,做了两年flashmtv(我是侧重于美工那种),我还只是flash爱好者,连熟手都谈不上,学as也只是很皮毛,没什么项目经验,只是在校园里看教程小打小闹那种。我们系的专长是acm比赛比较牛,可是没有我的分,自我感觉 flash花了我太大的精力,还见不到什么作为,本来在长期的反省中已经决定以后好好学习,不要把时间花在flash上面了。最近看了加拿大人写的 programming macromedia flash mx,又完全改变了我对flash的理解,原来flash的天地有这么广阔的。又见到你的帖子,让我颇有触动,长期以来一直在专业和爱好之间找不到平衡点,或者说理不清关系,我想至少你的帖子没有给我动力,也给了我不要绝望的勇气吧。因为从最粗浅的角度看,能把专业和爱好结合起来是再好不过的吧。
这个东西是我用Flash MX 结合ASP做的,
http://www.pioneer.hutc.zj.cn/new/shenghuo/diary/PubList.asp
做下来之后,觉得收获很多,特别是改变了Flash原来的那种看法,我觉得这样非常有意思,但是对于开发人员的要求也提高了,要有美工,还要懂中软件和语言,而且它们要结合的非常好才可以。
我不知道这个用这种方法网络的前景如何,只是觉得有意思,就去做了现在有.Net,Java如果要去开发网络,我真的不知道何去何从了,到底哪一中会是潮流呢?也许是各分天下吧。
flash mx2004 + c#/vb.net
http://expert.csdn.net/Expert/topic/2517/2517962.xml?temp=.5230524
如果把开发的flash客户端放到web服务器的页面如何实现。和自己开发的后台服务器实时通?
这个问题让我的程序失败了。
你们说的好难懂啊,真想学点,以后也好向你们讨教讨教,觉得你们真的好棒啊!!!!!!
服务器端还是用java吧
看这段代码
http://www.7yue.com/tutorial/mx2004/flash_socket.cfm
flash它发送socketxml的时候是用UTF-8的,我们只要服务器设置UTF-8接受字符就可以了。
向楼主学习。
期待更好的交流:)
用flash做游戏。用的C/S结构,在安全方面要解决。
FLASH在界面方面比我现在的游戏要好做。
这个点子好。
呵呵 我觉得单纯用flash做客户端 安全隐患非常严重哦!
to all: 最近公司的项目结束了,我就有精力开始继续做这个自己的项目啦 嘿嘿
大家一块讨论啊!
虚心学习,希望能在csdn上学到真东西,
msn:perfection_sutra@163.com
QQ:251903260
向楼主学习…….进步、进步、再进步。
http://expert.csdn.net/Expert/topic/2660/2660336.xml?temp=.9975855
mark
up
我也试了一下,服务器端用vc.net编写,客户端的flash用flash player播放时与服务器端通讯良好,但把它嵌入到网页中后就不能与服务器端通讯了,这是为何?
果然是个强帖子,一下子引出了这么多高手
俺也来好好学学啊
好象都懂一点可惜都不精通
致谢!
好东西啊 得好好学习!!高手们多教我们些东西啊!1
看这个游戏,就是java+flash作的。
http://game.focus.cn
XMLSocket
up
谁有C#实现代码么~~?
关注一下。。建议用java或者vc开发用c/c++更加好。服务器可以适应多平台。
其他不多说啦。。我的刚刚做到客户注册部分。。需要下载客户端
请问,大家一般用TCP还是UDP
我用C#写的服务器还有一个聊天室的演示:
http://expert.csdn.net/Expert/TopicView1.asp?id=2817440
你好!
我是刚学FLASH的新手
做的字体流动(由小变大、由左到右)变化时间动画总是颤抖的
请问这是为什么啊 ?
上面中的:
mySocket.onConnect = function(success)
是什么意思?
还有XMLSocket怎么接收java传回来的数据?
大家在开发过程中flash和java这间的字符集解决了没?
请教:flash如何调用C++程序?
lymckm@163.com
继续讨论! 加油 加油!
向给位高手学习!受益匪浅啊!
哦,俺原来想用flash+vb的winsocket。,php俺倒是也会一点。
最后
以上就是甜美大象为你收集整理的FLASH + JAVA 开发实时网络游戏[编程基础篇] with Socket API的全部内容,希望文章能够帮你解决FLASH + JAVA 开发实时网络游戏[编程基础篇] with Socket API所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复