当前位置:主页>FLASH AS 编程>flash和WEB程序应用>文章内容
  • Flash P2P 通信技巧(AS-Java-AS)
  • 来源:蓝色理想 作者:hack86 2008-05-16 【
FlashAs作品发表>>我要投稿 | FlashAs讨论区>>AS论坛
Flash Media Server学习站>>www.FMScn.com

Google

2 Java多线程服务器

基本的通信做到以后就是修改代码增加功能了,这里我们必须让Java能支持多个线程的连接,这才是服务器呀。

import java.io.*;
import java.net.*;
public class Server extends ServerSocket{
    //服务端口号常量(as要求必须大于1024,小于65535)
    private static final int SERVER_PORT = 10086;
    //构造函数
    public Server() throws IOException{
        super(SERVER_PORT);
        //监听新连接,为每个连接分配一个线程,将新的连接传入独立线程
        Socket socket = accept();
        new SocketThread(socket);
    }
    //入口函数...
    public static void main (String[] args) throws IOException{
        new Server();   
    }
    //建一个类,该类属于独立的线程,他的每个实例都会在独立的线程里运行
    class SocketThread extends Thread{
       
        //申明流的空间在独立线程里了,因为他属于传送时所需,主线程只是监听有没有新连接
        private Socket client;
        private BufferedReader in;
        private PrintWriter out;
        private String src;
           
        //构造函数
        public SocketThread(Socket socket) throws IOException{
            //初始客户端的连接为该线程传入的连接
            client = socket;
            //初始流在进来后读取前,和写入后发送前所存放的空间
            in = new BufferedReader(new InputStreamReader(client.getInputStream()));
            out = new PrintWriter(client.getOutputStream(),true);
            //准备工作完毕,启动该线程
            start();
        }
        public void run(){try {
            //循环等待读取信息
            while(true){
                //读取行信息,注意是以换行符结束的
                src = in.readLine();
                //如果发送"close",就跳出循环(断开连接)
                if(src.equals("close")){
                    break;
                }
                //在收到的信息前加是标识并发回(注意结尾加"\0",这是as的XMLSocket读入每条信息的条件.as3的Socket不需要)
                out.println("rev: "+src+"\0");
                //以上out.println("xx")相当于out.write("xx");out.flush();的执行效果
                System.out.println("msg is "+src)
            }
            //关闭连接
            close();
        }catch(IOException e){
        }catch(NullPointerException e){
            System.out.println("client closed");
        }}
    }
}

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



上一页 1 2 3 45 下一页

上一篇:flash 结合php 生成jpg/png图   下一篇:amfPHP工作原理
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)