请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

查看: 20239|回复: 32

[AS1&2] Flash P2P 通信技巧 (AS-Java-AS) [复制链接]

hack86 楼主
帖子
1018
体力
3157
威望
80
居住地
浙江省 杭州市
发表于 2007-7-12 08:49:51 |显示全部楼层
众所周知Flash的功能比较强大,但是有两个功能到目前为止始终无法实现
1是swf的点对点连接
2是swf读写操作文件
别想了,靠Flash本身是不可能的,虽然有传说中的MMSave();等一些隐藏函数,但是毕竟这些未公开的函数了解的人并不多,用起来也不方便。
那么究竟有没有其他办法可以扶助实现呢?答案当然是肯定的。在这里我们需要请出当前最热的两门名副其实的编程语言C++/Java,靠他们来实现你要实现的功能吧。
在这里我用Java举例。

首先我们必须了解 AS如何让Java做事?对于双方来讲唯一应用性最高的途径就是Socket了。
AS1->XMLSocket->send()->Java.Socket->InputStream
AS2->XMLSocket->send()->Java.Socket->InputStream
AS3->Socket->writh()->flush()->Java.Socket->InputStream
as1&2只支持以字符串形式发送socket,而as3支持真正意义上的流,在这里为了兼容和教学简单,我均以字符串形式来实现相互间的通信。



1->AS与Java最基本的通信

1.1 简单Java服务器
首先我们来做最简单的单线程Java服务器
  1. import java.io.*;
  2. import java.net.*;
  3. public class Server extends ServerSocket{
  4.         //服务端口号常量(as要求必须大于1024,小于65535)
  5.         private static final int SERVER_PORT = 10086;
  6.         //申明流的空间
  7.         private Socket client;
  8.         private BufferedReader in;
  9.         private PrintWriter out;
  10.         private String src;
  11.         //构造函数
  12.         public Server() throws IOException{
  13.                 super(SERVER_PORT);
  14.                 //监听连接,初始流在进来后读取前,和写入后发送前所存放的空间
  15.                 Socket socket = accept();
  16.                 in = new BufferedReader(new InputStreamReader(client.getInputStream()));
  17.                 out = new PrintWriter(client.getOutputStream(),true);
  18.                 //循环等待读取信息
  19.                 while(true){
  20.                         //读取行信息,注意是以换行符结束的
  21.                         src = in.readLine();
  22.                         //如果发送"close",就跳出循环(断开连接)
  23.                         if(src.equals("close")){
  24.                                 break;
  25.                         }
  26.                         //在收到的信息前加是标识并发回(注意结尾加"\0",这是as的XMLSocket读入每条信息的条件.as3的Socket不需要)
  27.                         out.println("rev: "+src+"\0");
  28.                         //以上out.println("xx")相当于out.write("xx");out.flush();的执行效果
  29.                         System.out.println("msg is "+src)
  30.                 }
  31.                 //关闭连接
  32.                 close();
  33.         }
  34.                
  35.         //入口函数...
  36.         public static void main (String[] args) throws IOException{
  37.                 new Server();       
  38.         }
  39. }
复制代码

这样一个Java的服务器就建好了,Java是同步的事件的驱动是等待的,这个AS是不同的,所以方法对与as区别还是比较大的,具体功能已经注释的非常清楚。至于具体Java的特性我不是专业的,为了对读者负责我就不做详细介绍了,有兴趣的朋友可以查阅Java相关书籍。
接下来呢就是AS的访问了:



1.2 AS1 与 Java 通信
Action Script 1
  1. var SERVER_PORT = 10086;
  2. var SERVER_IP = "127.0.0.1";
  3. var conn = new XMLSocket();
  4. conn.connect(SERVER_IP,SERVER_PORT);
  5. conn.onConnect = socketConnect;
  6. conn.onData = socketData;
  7. function socketConnect(success){
  8.         trace("connect"+success);
  9.         if(success){
  10.                 this.send("hello world\r");
  11.         }
  12. }
  13. function socketData(src){
  14.         trace(src);
  15. }
复制代码

接触了相对生疏的Java后现在回到AS,感觉就是爽,嘿嘿
前三行定义了三个变量,由于as1没有强制类型,所以千万别加上类型修饰符啊,反而会出错,请注意。
conn.connect(SERVER_IP,SERVER_PORT);连接到socket的服务器。
如果连接成功 Java中的 ServerSocket.accept();会返回一个对象,并向下执行。
as的连接成功呢则触发了socketConnect(success)的事件,并且把true的参数传如函数。当然连不到就是false了。
成功后就会发送一个"hello world\r"的字符串,"\r"是回车符,因为Java里我用的是readLine();所以需要看到行的结束。
当有数据进来的时候呢就会出发socketData函数了,这里把信息输出。
好了用as1的朋友到此已经成功与Java程序通讯了。



1.3 AS2 与 Java 通信
Action Script 2
  1. var SERVER_PORT:Number = 10086;
  2. var SERVER_IP:String = "127.0.0.1";
  3. var conn:XMLSocket = new XMLSocket();
  4. conn.connect(SERVER_IP,SERVER_PORT);
  5. conn.onConnect = socketConnect;
  6. conn.onData = socketData;
  7. function socketConnect(success:Boolean){
  8.         trace("connect"+success);
  9.         if(success){
  10.                 this.send("hello world\r");
  11.         }
  12. }
  13. function socketData(src:String){
  14.         trace(src);
  15. }
复制代码

以上是fla版,和as1唯一的区别就是有类型定义,这样做无论是时间执行效率还是空间执行效率都会有明显提高。
接下去看看真正的Action Script 2代码,将以下代码保存成Socket.as文件,和fla文件放在一起。
  1. class Socket extends XMLSocket{
  2.         public function Socket(){
  3.                 super();
  4.         }
  5.         public function onConnect(success:Boolean){
  6.                 trace("connect"+success);
  7.                 if (success){
  8.                         this.send("hello world\r");
  9.                 }
  10.         }
  11.         public function onData(src:String){
  12.                 trace(src);
  13.         }
  14. }
复制代码

fla里在帧上写
  1. var SERVER_PORT:Number = 10086;
  2. var SERVER_IP:String = "127.0.0.1";
  3. var conn:Socket = new Socket();
  4. conn.connect(SERVER_IP,SERVER_PORT);
复制代码

这才是真正的as2,当然你可以更好的修改Socket,让他符合Server的要求,比如在类里加上一个常量,并写入符合Server要求的方法。
  1. public var msg:String = "";
  2. public function write(src){
  3.         msg += src;
  4. }
  5. public function flush(){
  6.         this.send(msg+"\r");
  7.         msg = "";
  8. }
复制代码

这样在fla里发送的方式就改为
  1. conn.write("hello world");
  2. conn.flush();
复制代码

这样是不是又规范又符合Java的要求了呢?我只是举是一个简单例子,你可以按要求自己再修改。



1。4 AS3 与 Java 通信
Action Script 3
最后是传说中的as3了,这里我们用Socket中的writeUTFBytes();来写字符串。首先来看fla版的
  1. var SERVER_PORT:Number = 10086;
  2. var SERVER_IP:String = "127.0.0.1";
  3. var conn:Socket = new Socket(SERVER_IP,SERVER_PORT);
  4. conn.addEventListener("connect",socketConnect);
  5. conn.addEventListener("socketData",socketData);
  6. function socketConnect(event:Event){
  7.         event.target.writeUTFBytes("hello world");
  8.         event.target.writeByte(10);
  9.         event.target.flush();
  10. }
  11. function socketData(event:ProgressEvent){
  12.         trace(event.target.readUTFBytes(event.target.bytesAvailable));
  13. }
复制代码

看看这个fla版本的是不是在代码上思路更加清晰呢?所有事件已经全部改为监听的方式,并且所有事件将把事件作为参数传入函数。
bytesAvailable为字节长度,而readUTFBytes的参数是从当前指向的位置读取到参数位置,这样写就是读完。
在as2里,如果在事件触发的函数里写this指向的是触发事件的实例,而as3永远指向所在类的实力,触发事件的实例被记录在传入事件参数的target对象中。
as3更加注重的是oop,在fla里已经体现出来了。接下来就来看看DocmentClass的方法
  1. package{class Run{
  2.         private var SERVER_PORT:Number = 10086;
  3.         private var SERVER_IP:String = "127.0.0.1";
  4.         public function Run(){
  5.                 //在这里写代码并在flash里设置该类为文档类,和直接写上帧上其实没有区别,入口函数
  6.                 new ClientSocket(SERVER_IP,SERVER_PORT);
  7.         }
  8. }}
复制代码

当然还有一个ClientSocket.as的文件放这个socket客户端类
  1. package {
  2.         import flash.net.Socket;
  3.         import flash.events.ProgressEvent;
  4.         import flash.events.Event;
  5.         import flash.events.IOErrorEvent;
  6.         public class ClientSocket extends Socket {
  7.                 public function ClientSocket(ip:String,port:uint) {
  8.                         super(ip,port);
  9.                         addEventListener("cennect",socketConnect);
  10.                         addEventListener("socketData",socketData);
  11.                         addEventListener("ioError",ioError);
  12.                 }
  13.                 public function send(src:String) {
  14.                         writeUTFBytes(src);
  15.                         writeByte(10);
  16.                         flush();
  17.                 }
  18.                 private function socketConnect(event:Event) {
  19.                         send("hello world");
  20.                 }
  21.                 private function socketData(event:ProgressEvent) {
  22.                         trace(readUTFBytes(bytesAvailable));
  23.                 }
  24.                 private function ioError(event:IOErrorEvent) {
  25.                         trace("connect error");
  26.                 }
  27.         }
  28. }
复制代码

入口函数创建了一个客户端的对象,而具体的类的内部构造如上代码所示:
首先创建父类构造函数,再为自己添加监听,当连接时执行socketConnect();发送字符串,注意writeByte(10)是换行符。
在as3的socket类里还有其他的事件,这里因为教学原因所以没有过多的举例,相关可以查阅socket的帮助
close  在服务器关闭套接字连接时调度。
connect  在建立网络连接后调度。(这个监听在教程里已经实现)
deactivate  Flash Player 失去操作系统焦点并变为非活动状态时调度。
ioError  在出现输入/输出错误并导致发送或加载操作失败时调度。(以前是在onConnect传入false,而这里是直接引发ioError事件,更规范)
securityError  若对 Socket.connect() 的调用尝试连接到调用方安全沙箱外部的服务器或端口号低于 1024 的端口,则进行调度。
socketData  在套接字接收到数据后调度。 (这个监听在教程里已经实现)



2 Java多线程服务器
基本的通信做到以后就是修改代码增加功能了,这里我们必须让Java能支持多个线程的连接,这才是服务器呀。
  1. import java.io.*;
  2. import java.net.*;
  3. public class Server extends ServerSocket{
  4.         //服务端口号常量(as要求必须大于1024,小于65535)
  5.         private static final int SERVER_PORT = 10086;

  6.         //构造函数
  7.         public Server() throws IOException{
  8.                 super(SERVER_PORT);
  9.                 //监听新连接,为每个连接分配一个线程,将新的连接传入独立线程
  10.                 Socket socket = accept();
  11.                 new SocketThread(socket);
  12.         }

  13.         //入口函数...
  14.         public static void main (String[] args) throws IOException{
  15.                 new Server();       
  16.         }

  17.         //建一个类,该类属于独立的线程,他的每个实例都会在独立的线程里运行
  18.         class SocketThread extends Thread{
  19.                
  20.                 //申明流的空间在独立线程里了,因为他属于传送时所需,主线程只是监听有没有新连接
  21.                 private Socket client;
  22.                 private BufferedReader in;
  23.                 private PrintWriter out;
  24.                 private String src;
  25.                        
  26.                 //构造函数
  27.                 public SocketThread(Socket socket) throws IOException{
  28.                         //初始客户端的连接为该线程传入的连接
  29.                         client = socket;
  30.                         //初始流在进来后读取前,和写入后发送前所存放的空间
  31.                         in = new BufferedReader(new InputStreamReader(client.getInputStream()));
  32.                         out = new PrintWriter(client.getOutputStream(),true);
  33.                         //准备工作完毕,启动该线程
  34.                         start();
  35.                 }

  36.                 public void run(){try {
  37.                         //循环等待读取信息
  38.                         while(true){
  39.                                 //读取行信息,注意是以换行符结束的
  40.                                 src = in.readLine();
  41.                                 //如果发送"close",就跳出循环(断开连接)
  42.                                 if(src.equals("close")){
  43.                                         break;
  44.                                 }
  45.                                 //在收到的信息前加是标识并发回(注意结尾加"\0",这是as的XMLSocket读入每条信息的条件.as3的Socket不需要)
  46.                                 out.println("rev: "+src+"\0");
  47.                                 //以上out.println("xx")相当于out.write("xx");out.flush();的执行效果
  48.                                 System.out.println("msg is "+src)
  49.                         }
  50.                         //关闭连接
  51.                         close();
  52.                 }catch(IOException e){
  53.                 }catch(NullPointerException e){
  54.                         System.out.println("client closed");
  55.                 }}
  56.         }
  57. }
复制代码

修改后的Java主线程监听是否有新的连接,如果有就把这个连接分配到新的线程,让他去监听消息,而自己继续监听连接,这样的思路是不是很清晰呢?
仔细看看其实不是很难,大部分的代码都和前面的一样,只是循环监听信息的代码被放到的独立的线程里面。
关于多线程和一些Java的技术问题,为了对大家负责,我依然谨慎言语,以免误导大家。
现在你可以启动多个as对Java进行连接,并且他们之间互不干扰。一个线程对应一个连接,底层的工作非常透明,管理非常容易。



3 AS 通过Java数据转发实现P2P通信
谈到这里,其实要实现这步就非常容易了,原理上只要将本来Java收到后返回的信息,发到别人这里去,就可以了。原理如下所示
flash_1 -> Java -> flash_2
flash_2 -> Java -> flash_3
flash_3 -> Java -> flash_1
这样任何两个flash之间都能通过java转发了,现在只有一个问题,就是Java怎么知道我的信息要发给谁?其实很简单我们在每个连接连入的时候发送一条注册信息,让Java知道我的名字,而别人只要在字符串前加上我的名字就可以了。
那么在Java里 我们需要两个功能
1个是增加和删除自己的标识
2是识别字符串中哪些是名字,哪些是信息
这里我们用到方法是<空格>
"r s1";这样的一条信息过去,Java服务器要处理为该连接添加一个标识s1,而在这以后任何客户端只要发送
"s1 Hello";就会把"Hello"这个字符串发送给标识为s1的客户端,这样两个flash之间就完全实现了数据互通
"u s1";当离开的时候可以用这个代码来删除s1的标识符
为了简单和安全,我们可以暂设为标识必须是两位,以字母开头,这样的组合已经超过千种,绝对够用了。
这样只要判断空个所出现的位置即可,如果是第二位就是注册或卸载标识,如果是第三位就是字符转发了,如果都没有,那就是错误信息。
把上面的Run里的out.println("rev: "+src+"\0");改成以下信息就可以判断信息是注册还是卸载了
  1. //屏蔽所有长度小于4的信息,不做处理.
  2. if(line.length()<4){
  3.         out.write("error: length<4");
  4.         out.flush();
  5.         line = in.readLine();
  6.         continue;
  7. }
  8. //命令字符
  9. if (line.charAt(1)==' '){
  10.         //相应客户端命令请求
  11.         name = line.substring(2);
  12.         switch (line.charAt(0)) {
  13.         case 'r':
  14.                 //注册客户端
  15.                 if (!registered && name.length()==2){
  16.                         //为自己加一个ID
  17.                         Server.clientID.put(name,client);
  18.                         registered = true;
  19.                         //返回注册成功
  20.                         out.write("registeration successed");
  21.                         out.flush();
  22.                 }
  23.                 break;
  24.         case 'u':
  25.                 //删除客户端
  26.                 Server.clientID.remove(name);
  27.                 registered = false;
  28.                 break;
  29.         }
  30. }else if (line.charAt(2)==' '){
  31.         //这里是转发代码;
  32. }
复制代码

当然这里用的一些API在前面还要声明过。在线程类里增加两条申明
  1. private String name;
  2. private boolean registered;
复制代码

构造函数里
  1. registered = false;
复制代码

当然最重要的是还要在Server的主线程里声明一个放ID的容器
  1. public static HashMap clientID = new HashMap();
复制代码

这样每个连接都有自己的ID了

现在要做的是在转发了,在上面的转发代码的地方写
  1. send(line.substring(0,2),line.substring(3));
复制代码

当然send函数还没有定义呢,现在定义
  1. public boolean send(String id, String src) throws IOException {
  2.         //读取标识的地址
  3.         Socket socket = (Socket)Server.clientID.get(id);
  4.         if (socket != null){
  5.                 out = new PrintWriter(socket.getOutputStream(), true);
  6.                 out.write(src);
  7.                 out.flush();
  8.                 return true;
  9.         }else{
  10.                 return false;       
  11.         }
  12. }
复制代码

这里我加入了判断id是否存在,当不存在就没有任何操作,并且将操作结果成功与否返回,在send的时候就可以分类成功或不成功分别做什么了。


马上来开两个AS吧,用到我们刚才第一章节里自己封装的as2,把加载成功的地方改成send("r c1\r");和send("r c2\r");
Action Script 2
  1. //file1
  2. var SERVER_PORT:Number = 10086;
  3. var SERVER_IP:String = "127.0.0.1";
  4. conn:Socket = new Socket();
  5. conn.connect(SERVER_IP,SERVER_PORT);
  6. conn.onConnect = function (success:Boolean){
  7.         if (success){
  8.                 write("r c1");
  9.                 flush();
  10.         }
  11. }

  12. //file2
  13. var SERVER_PORT:Number = 10086;
  14. var SERVER_IP:String = "127.0.0.1";
  15. conn:Socket = new Socket();
  16. conn.connect(SERVER_IP,SERVER_PORT);
  17. conn.onConnect = function (success:Boolean){
  18.         if (success){
  19.                 write("c2 hello");
  20.                 flush();
  21.         }
  22. }
复制代码

依次运行file1,file2看看,file2运行的时候是不是成功收到了一个hello呢?嘿嘿。
这样做虽然底层还是没有实现P2P,但是效果已经达到,如果还是觉得不够理想,那么可以每个客户端都绑定一个Java的ServerSocket,负责收信息,并转发给同绑定Flash,这样虽然没有实现swf的p2p,但是在底层已经p2p了。



[完毕...  答疑和下载 在11楼]
<1 AS与Java最基本的通信> .. OK
<2 Java多线程服务器> .. OK
<3 AS 通过Java数据转发实现P2P通信> .. OK
<4 将P2P方式用类封装资源免费下载> .. OK

[ 本帖最后由 hack86 于 2007-7-12 20:37 编辑 ]
已有 1 人评分威望 收起 理由
jimohuoshan + 5 精品文章

总评分: 威望 + 5   查看全部评分

Flash Game Development
Rich Internet Application
西部数码顶级域名注册商39元抢注!

目光呆滞的狐狸

高级会员

帖子
1069
体力
1131
威望
0
居住地
广东省 广州市
发表于 2007-7-12 09:07:33 |显示全部楼层
学习了```
君子动手不动口
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

weni 
帖子
45
体力
5
威望
0
居住地
广东省 广州市
发表于 2007-7-12 09:10:50 |显示全部楼层
题目应该错了,应该是Flash结合java实现Socket通讯。
要知道两个flash之间如果不依靠其它技术是无法实现相互的P2P通讯的,因为flash的socket只能是Socket Client
,不能是Socket Server(Listener)。
两个应用要实现Socket通讯就必须一个是监听端一个客户端的。

使用道具 举报

alvas 
帖子
68
体力
294
威望
3
发表于 2007-7-12 09:53:38 |显示全部楼层
我看你怎么P2P
少些争论,多写教程

使用道具 举报

帖子
125
体力
420
威望
1
居住地
广西壮族自治区 南宁市
发表于 2007-7-12 10:32:03 |显示全部楼层
P其他服务器吧,P客户端纯FLASH不可能,能的话就神了

使用道具 举报

帖子
157
体力
553
威望
0
发表于 2007-7-12 10:41:48 |显示全部楼层
写的不错!
不过纯p2p是不行的,只能通过服务器转发!

使用道具 举报

寂寞火山

荣誉管理 手机认证 

帖子
2584
体力
10205
威望
197
发表于 2007-7-12 11:28:23 |显示全部楼层
以后AS3和JAVA相互配合的应用肯定会越来越多,越来越深入!

使用道具 举报

得失

银牌会员

帖子
677
体力
2573
威望
1
发表于 2007-7-12 12:01:31 |显示全部楼层
请问Socket socket = accept();
里面是什么机制实现监听的?
这个语法在main thread中应该只执行一次就完了,如何才能不能监听呢?

使用道具 举报

alvas 
帖子
68
体力
294
威望
3
发表于 2007-7-12 13:43:43 |显示全部楼层
原帖由 jimohuoshan 于 2007-7-12 11:28 发表
以后AS3和JAVA相互配合的应用肯定会越来越多,越来越深入!


火山说的对,其实梦境已经早这么做了。

其实楼主讲的不错,java写的server就一个最简单普通的。但是已经把问题讲清楚了,很好,对于初学者有所了解就OK了。其实一个把as写的很好的人真的很难写一个好的server的。因为一个好的server在一台主流PC上1s能处理5K的连接,但恐怕除了专家很少有人能搞出来。

所以了,大家要成为AS专家(相信大部分都是专搞as的吧),而不是东搞搞,西搞搞。奉劝那些又想学这个又想学那个的同学们,成某一方面的专家即可,不用三心二意。。

欢迎大家讨论。

[ 本帖最后由 alvas 于 2007-7-12 13:49 编辑 ]
少些争论,多写教程

使用道具 举报

我是棉花糖

银牌会员

帖子
936
体力
2563
威望
6
发表于 2007-7-12 13:49:32 |显示全部楼层
精品文章的标题是不是应该改改?

使用道具 举报

hack86 楼主
帖子
1018
体力
3157
威望
80
居住地
浙江省 杭州市
发表于 2007-7-12 13:49:44 |显示全部楼层


回8楼  Server是继承了ServerSocket的,所以accept();就是 ServerSocket.accept();
Java是同步的,执行到这里Java会等待,知道有连接才会继续执行下面的代码。
这里用一个while(true){ServerSocket.accept();}就可以持续监听了。每次收到连接执行下面,又循环到上面,继续等待。
要停止给一个条件 break; 就可以了。

回9楼 做为一个AS程序员,我觉得要做的就是学习AS的精粹和相关的东西,AS程序即使学习JavaAPI也是为自己的AS服务。做为一个程序员,其实没有不会的程序,之所以写不出来程序是因为不知道该语言的API,一个不会Java或C的程序员不是合格的程序员,但是这个会只是知道他的原理和基础,不包括API。
9楼说得非常对,不要想着什么都精通,专一门,别的该学的学,不该学的不要浪费时间,现在的作品都是团队合作的。质量远远比一个人开发的作品速度快,质量高。
而有些极端的人说那我只学AS,其他都不管,您觉得可以吗?程序是必须需要基础的。
建议所有AS的程序员去学习一下 国家计算机等级考试二级 或者 国家计算机技术与软件专业技术资格(水平)考试程序员 对AS是有帮助的。
比如你不学数据结构,你说你精通AS,可以啊,我说AS的对象全部存在一张哈希表里,您能听得懂吗?
比如你不学Java基础,我说类继承不继承构造函数,AS的类不可重载,只能用switch参数模拟,您能理解吗?
比如你不学C/C++基础,我说AS里除了简单类型uint,number,string等是值变量,其他全部是指针变量,您有何看法呢?
有些东西是必学的,必须扎实,这样才能更加充实AS的研究道路,要知道让一个没有接触过Flash的普通程序员去理解什么时间轴变量,什么MC对象也不是很容易的事。相反有些自己领域没有必要学的,就不要浪费自己的时间,事倍功半。

回10楼 改成什么??



回14楼 不会就不会,as程序员只要负责把socket的原理理解,发出去然后等着收,java端 是Java程序员的事,和你有什么关系?? 基础想学就学一下,我的注释很清楚,如果不想学 Java源码已经提供 你直接用就可以。


回15楼 我是一个标准的程序员 C/Java都必须会 但要说明的是 我的会是没有API的。会的只是基础、概念、特点这是所有程序员必须掌握的。

[ 本帖最后由 hack86 于 2007-7-12 14:19 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
Flash Game Development
Rich Internet Application

使用道具 举报

帖子
340
体力
555
威望
2
发表于 2007-7-12 13:52:48 |显示全部楼层
为什么不用 FMS 做服务器呢?

使用道具 举报

alvas 
帖子
68
体力
294
威望
3
发表于 2007-7-12 14:01:42 |显示全部楼层
原帖由 geniicheng 于 2007-7-12 13:52 发表
为什么不用 FMS 做服务器呢?



FMS可扩展性太差。。。而且很贵。。。还不如RED5有前途。
少些争论,多写教程

使用道具 举报

jevin 

小丑鱼

银牌会员

帖子
1562
体力
5411
威望
0
发表于 2007-7-12 14:12:08 |显示全部楼层
java 不会 怎么办
xhtml/css/Ajax/AS/php/mysql你才是程序员,你家全是程序员 -__-

使用道具 举报

alvas 
帖子
68
体力
294
威望
3
发表于 2007-7-12 14:13:28 |显示全部楼层
原帖由 jevin 于 2007-7-12 14:12 发表
java 不会 怎么办


你要做as专家还是java专家?   了解一下java是很好的,自己学学吧,我是java转as的。
少些争论,多写教程

使用道具 举报

帖子
340
体力
555
威望
2
发表于 2007-7-12 14:22:51 |显示全部楼层
FMS可扩展性太差。。。而且很贵。。。还不如RED5有前途。


我今天下午才研究 FMS 的,好像进入状况很难啊,
这段时间我打算用 AIR 做个 聊天 程序
,你说的这个RED5是什么东东啊

使用道具 举报

jevin 

小丑鱼

银牌会员

帖子
1562
体力
5411
威望
0
发表于 2007-7-12 14:25:22 |显示全部楼层
原帖由 alvas 于 2007-7-12 14:13 发表


你要做as专家还是java专家?   了解一下java是很好的,自己学学吧,我是java转as的。

不是不会 是忘了 学AS的时候也几乎没用到JAVA的东西
看来如果真要用LZ说的东西 JAVA还是要捡回来
xhtml/css/Ajax/AS/php/mysql你才是程序员,你家全是程序员 -__-

使用道具 举报

hack86 楼主
帖子
1018
体力
3157
威望
80
居住地
浙江省 杭州市
发表于 2007-7-12 14:30:11 |显示全部楼层
居然还有忘这种说话? hoho      
如果真学过,我就不相信以上教程中我的Java代码会看不懂!如果懂做为AS程序员Java到这个程度已经够了!   
也没有会和不会这么一说。
Flash Game Development
Rich Internet Application

使用道具 举报

奥博瑞德

银牌会员

帖子
562
体力
1928
威望
10
发表于 2007-7-12 14:51:59 |显示全部楼层

果然写出来东西了

呵呵 顶一下 回去再欣赏
向大家学习!

使用道具 举报

我是棉花糖

银牌会员

帖子
936
体力
2563
威望
6
发表于 2007-7-12 16:15:36 |显示全部楼层
swf2swf 的 P2P

  1. //  file1
  2. var lc:LocalConnection = new LocalConnection();

  3. _root.send.onPress = function ()
  4. {
  5.         _root.txt.text += _root.input.text + "\n";
  6.         lc.send("_p1", "talk", _root.input.text);
  7.         _root.input.text = "";
  8. }

  9. lc.talk = function ($str:String):Void
  10. {
  11.     _root.txt.text += $str + "\n";
  12. }

  13. lc.connect("_p2");
复制代码

  1. //  file2
  2. var lc:LocalConnection = new LocalConnection();

  3. _root.send.onPress = function ()
  4. {
  5.         _root.txt.text += _root.input.text + "\n";
  6.         lc.send("_p2", "talk", _root.input.text);
  7.         _root.input.text = "";
  8. }

  9. lc.talk = function ($str:String):Void
  10. {
  11.     _root.txt.text += $str + "\n";
  12. }

  13. lc.connect("_p1");
复制代码

[ 本帖最后由 abc12hjc 于 2007-7-12 16:20 编辑 ]

使用道具 举报

hack86 楼主
帖子
1018
体力
3157
威望
80
居住地
浙江省 杭州市
发表于 2007-7-12 20:34:24 |显示全部楼层
lc 可以在同一台机器上 实现p2p通信 可以把参数传到对方的swf中,让接受放执行lc对象下的函数。
Flash Game Development
Rich Internet Application

使用道具 举报

帖子
1219
体力
5975
威望
234
发表于 2007-7-12 21:21:39 |显示全部楼层
不错,hack86的进步越来越快了:)

使用道具 举报

mjking 

我是7Yue

荣誉管理

帖子
1454
体力
1518
威望
13
发表于 2007-7-13 10:29:34 |显示全部楼层
Red5
访问RIAForge.org看看。
失去执着,将一无所有。
www.7yue.com

使用道具 举报

jevin 

小丑鱼

银牌会员

帖子
1562
体力
5411
威望
0
发表于 2007-7-13 10:55:19 |显示全部楼层
原帖由 hack86 于 2007-7-12 14:30 发表
居然还有忘这种说话? hoho      
如果真学过,我就不相信以上教程中我的Java代码会看不懂!如果懂做为AS程序员Java到这个程度已经够了!   
也没有会和不会这么一说。

昨天是没看就回了
其实JAVA和AS3很像 LZ解释写这么详细 想不懂就难啊
xhtml/css/Ajax/AS/php/mysql你才是程序员,你家全是程序员 -__-

使用道具 举报

hack86 楼主
帖子
1018
体力
3157
威望
80
居住地
浙江省 杭州市
发表于 2007-7-13 12:39:18 |显示全部楼层
JAVA像AS3? 哈哈  貌似Java出得早 哈哈
Flash Game Development
Rich Internet Application

使用道具 举报

renx 

红色野菜

中级会员

帖子
786
体力
275
威望
0
发表于 2007-8-2 15:25:18 |显示全部楼层
原来还是p2s2p
建议楼主改下标题,容易引起误会的
vancing.com

使用道具 举报

灰色系

银牌会员

帖子
2421
体力
2377
威望
11
居住地
湖北省 黄冈市
发表于 2007-8-2 15:37:15 |显示全部楼层
学习~学习~

使用道具 举报

帖子
53
体力
256
威望
2
居住地
湖南省 长沙市
发表于 2007-8-2 19:32:06 |显示全部楼层
good,收藏了,不过暂时没时间研究。

使用道具 举报

hack86 楼主
帖子
1018
体力
3157
威望
80
居住地
浙江省 杭州市
发表于 2007-8-3 09:21:59 |显示全部楼层
原帖由 renx 于 2007-8-2 15:25 发表
原来还是p2s2p
建议楼主改下标题,容易引起误会的


已经写了是技巧,个人觉得为什么一定转牛角呢?如果按您的说法,那么只有s2p没有p2p了,即使两端,总要有一个做服务器的。
Flash Game Development
Rich Internet Application

使用道具 举报

帖子
90
体力
171
威望
0
发表于 2007-9-1 15:16:54 |显示全部楼层
i dont know!
向热心朋友致敬

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-13 12:16 , Processed in 0.233315 second(s), 9 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部