2011-05-19 29 views
0

我想知道如何使用我的flex AIR项目中的AMF格式将数据发送到使用Java编写的套接字。当使用writeUTFBytes()方法发送数据时,我得到CorruptedStreamException。有没有人遇到类似的问题? AMF只能用于仅使用LCDS的情况吗?如何将AMF格式的数据从flex发送到java套接字服务器?

private SimpleServer(int port) 
{ 
    System.out.println(">> Starting SimpleServer on port " + port); 
    try 
    { 
     socket  = new ServerSocket(port); 
     incoming = socket.accept(); 
     objectInputStream = new ObjectInputStream(incoming.getInputStream()); 
     objectOutputStream = new ObjectOutputStream(incoming.getOutputStream()); 
     boolean done = false; 
     while (!done) 
     { 
      Object obj = objectInputStream.readObject(); 
      System.out.println(obj.toString()); 
      if(obj == null) 
      { 
       done = true; 
       incoming.close(); 
      } 
     } 
    } 
    catch (Exception e) 
    { 
     System.out.println(e); 
    } 
} 

而我的AS3功能将数据发送到服务器

 private function onSendClick():void 
     { 
      var host:String = "10.87.118.8"; 
      var port:int = 9090; 

      var socket:Socket = new Socket(); 

      trace("Connect"); 
      socket.connect(host, port); 

      trace("write"); 
      socket.writeUTFBytes("HelloSocket"); 

      trace("flush"); 
      socket.flush(); 
     } 
+0

请添加一些代码示例 – 2011-05-19 10:15:28

回答

2

AMF表示动作消息格式。

这是一个规范,它定义了如何在ActionScript客户端和外部系统之间传输数据。

因此,许多服务器端技术将AMF整合到其包中。 例如BlazeDS,GraniteDS,pyAMF,amfphp,...

因此,要回答你的问题,没有AMF也可以在LCDS之外使用。 它只是一个可用于发送消息(=数据)的“信封”。

它甚至应该可以与套接字一起使用。 我相信有一个名为merapi的开源库,它使用这个原理。

干杯

1

这是一个老问题了,但因为在ActionScript端使用的是

socket.writeUTFBytes("HelloSocket"); 

在Java方面,它改变这一点,它会不AMF工作:

BufferedReader in = new BufferedReader (new InputStreamReader((clientSocket.getInputStream()))); 
String line = "";    
while((line = in.readLine()) != null) { 
    processMessage(line); 
} 
相关问题