我想用java建立tcp/ip服务器然后用flash接受服务器发送的数据,同事将数据发送给js代码然后进一步操作

服务器代码:
package JSocket;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Server {
private static final int PORT = 3000; // 端口号
private static List list = new ArrayList(); // 保存连接对象
private ExecutorService exec;
private ServerSocket server;

public static void main(String[] args) {
    new Server();
}
public Server() {
    try {
        server = new ServerSocket(PORT);
        exec = Executors.newCachedThreadPool();
        System.out.println("服务器已启动!");
        Socket client = null;
        while (true) {
            client = server.accept(); // 接收客户连接
            list.add(client);
            exec.execute(new ChatTask(client));
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

static class ChatTask implements Runnable {
    private Socket socket;
    private BufferedReader br;
    private String msg="";

    public ChatTask(Socket socket) throws IOException {
        this.socket = socket;
        br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    }

    public void run() {
        new Thread(new Runnable() {
            public void run() {
                PrintWriter pw;
                try {
                    pw = new PrintWriter(socket.getOutputStream(), true);
                        int i = 0;
                        while(true){
                            i=i+1;
                            msg=i+"\n";
                            try {
                                Thread.sleep(2000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            pw.println(msg);
                        }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

}
客户端代码:
<?xml version="1.0" encoding="utf-8"?>
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="initApp()">
fx:Script
<![CDATA[
import flash.net.Socket;

        import mx.controls.Alert;
        private var socket:Socket;
        private function initApp():void
        {
            StartTest();
        }
        private function StartTest():void
        {         
            socket = new Socket("127.0.0.1",3000);     
            //              socket.addEventListener(Event.CONNECT, connectHandler);
            socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
        }
        private function CloseTest():void
        {   
            if(socket!=null && socket.connected)
            {
                trace("socket.connected:"+socket.connected);
                socket.close();
                trace("socket.connected:"+socket.connected);
            }
        }
        //          private function connectHandler(event:Event):void
        //          {
        //              trace("connectHandler: " + event);
        //              socket.writeMultiByte(SendStr.text,"GB2312");               
        //              socket.flush();
        //          }
        private function socketDataHandler(event:ProgressEvent):void
        {
            trace("socketDataHandler: " + event);
            var str:String=socket.readMultiByte(socket.bytesAvailable,"GB2312");
            [color=red]ExternalInterface.call("addValue",str);[/color]
            //              Alert.show(str);

// ReceiveStr.text = str;
}
private function alert():void{
for(var i:int=0;i ExternalInterface.call("addValue","success!"+i);
}
}
]]>
/fx:Script


/s:Application
jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



jsocketTest



[color=red]<br> function addValue(value) {<br> alert(value);<br> //mySocket.innerText = mySocket.innerText + value;<br> }<br> [/color]







<!--[if !IE]>-->





<!--<![endif]-->
<!--[if gte IE 6]>-->


Either scripts and active content are not permitted to run or Adobe Flash Player version
10.0.0 or greater is not installed.


<!--<![endif]-->

Get Adobe Flash Player

<!--[if !IE]>-->

<!--<![endif]-->



我想用java建立tcp/ip服务器然后用flash接受服务器发送的数据,同事将数据发送给js代码然后进一步操作,但是flash单独运行可以接受到服务器的数据,但一旦传给js,js确接不到数据。正常用flash调用js函数还好使,就是flash从服务器接受到的数据在传给js就是显示不出来!帮帮我吧!先谢谢大家了!

3个回答

你的问题在这里 在flash的安全机制中 localhost和127.0.0.1不是一个域 你可以统一使用localhost 或者 127.0.0.1 不要分开用 否则flash player会认为是不同的域 不同的域之间是需要策略文件的 不知道我说明白了

你访问的时候 试试使用http://127.0.0.1:9000/appname````

你是想使用flash的socket功能吧 js调用AS函数 as函数返回json给js 在js里面处理信息 这样没问题 你在火狐的错误控制台看看 是不是有什么地方报错了

在使用socket前 先从服务器加载一下策略文件 策略文件放置在服务器的跟目录
如果你的域名是是www.yourdomain.com的话 www.yourdomain.com/crossdomain.xml这样访问的话 是可以访问到策略文件的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问