我有一个Flex AIR应用程序,我正在尝试从Java Server获取数据。有人可以告诉我这种方法是否有效?
用Java启动ServerSocket并等待连接 使用Flex连接到同一端口 从Java Server向套接字写入一些数据 读取Flex端的数据并进行处理。
- 更新: 我想我能够正常工作,但我在Flex端回读的数据似乎是空的。
我的服务器代码是:
socket = new ServerSocket(port);
client = socket.accept();
InetAddress address = client.getInetAddress();
BufferedReader in = new BufferedReader( new InputStreamReader(
client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream());
out.println("hi");
out.flush();
我在Flex中的代码是
private function onRecieveDataClick():void
{
var host:String = "127.0.0.1";
var port:int = 9090;
var socket:Socket = new Socket();
socket.endian = Endian.BIG_ENDIAN;
socket.addEventListener(Event.CONNECT, onConnect);
socket.connect(host, port);
}
private function onConnect(event:Event):void
{
trace(" Connected to server socket ");
var socket:Socket = Socket(event.target);
var obj:String = socket.readUTFBytes( socket.bytesAvailable);
trace(obj);
}
我当前的问题是socket.bytesAvailable
变为0,因此obj
即将成为“”。那么如何使用Flex中的Socket
读取服务器发送的数据?
答案 0 :(得分:2)
经过一些基本的谷歌搜索后,我发现了一篇博文,它完全符合您的描述: http://arthurnn.com/blog/2010/12/09/socket-connection-beteween-flex-air-and-java/
然而,该示例在localhost上运行java应用程序,而不是像您描述的那样远程运行。 因此,在尝试连接到远程服务器套接字时,可能会遇到一些沙箱违规。这可以通过将crossdomain.xml添加到java app server的根目录来解决。
事实上,这篇博文是merapi幕后工作的一个基本例子。
干杯