http://hideto.iteye.com/blog/235811

需要下载as3corelib来为ActionScript3处理JSON codec

server.erl

  1. -module(server).
  2. -export([start/0,start/1,process/1]).
  3. -define(defPort, 8888).
  4. start() -> start(?defPort).
  5. start(Port) ->
  6. case gen_tcp:listen(Port, [binary, {packet, 0}, {active, false}]) of
  7. {ok, LSock} -> server_loop(LSock);
  8. {error, Reason} -> exit({Port,Reason})
  9. end.
  10. %% main server loop - wait for next connection, spawn child to process it
  11. server_loop(LSock) ->
  12. case gen_tcp:accept(LSock) of
  13. {ok, Sock} ->
  14. spawn(?MODULE,process,[Sock]),
  15. server_loop(LSock);
  16. {error, Reason} ->
  17. exit({accept,Reason})
  18. end.
  19. %% process current connection
  20. process(Sock) ->
  21. Req = do_recv(Sock),
  22. io:format("~p~n", [Req]),
  23. {ok, D, []} = rfc4627:decode(Req),
  24. {obj, [{"name", _Name}, {"age", Age}]} = D,
  25. Name = binary_to_list(_Name),
  26. io:format("Name: ~p, Age: ~p~n", [Name, Age]),
  27. Resp = rfc4627:encode({obj, [{"name", 'Hideto2'}, {"age", 24}]}),
  28. do_send(Sock,Resp),
  29. gen_tcp:close(Sock).
  30. %% send a line of text to the socket
  31. do_send(Sock,Msg) ->
  32. case gen_tcp:send(Sock, Msg) of
  33. ok -> ok;
  34. {error, Reason} -> exit(Reason)
  35. end.
  36. %% receive data from the socket
  37. do_recv(Sock) ->
  38. case gen_tcp:recv(Sock, 0) of
  39. {ok, Bin} -> binary_to_list(Bin);
  40. {error, closed} -> exit(closed);
  41. {error, Reason} -> exit(Reason)
  42. end.

Person.as

  1. package
  2. {
  3. public class Person
  4. {
  5. public var name:String;
  6. public var age:int;
  7. public function Person()
  8. {
  9. }
  10. }
  11. }

Client.as

  1. package {
  2. import com.adobe.serialization.json.JSON;
  3. import flash.display.Sprite;
  4. import flash.events.*;
  5. import flash.net.Socket;
  6. import flash.text.*;
  7. public class Client extends Sprite
  8. {
  9. private var socket:Socket;
  10. private var myField:TextField;
  11. private var send_data:Person;
  12. public function Client()
  13. {
  14. socket = new Socket();
  15. myField = new TextField();
  16. send_data = new Person();
  17. send_data.name = "Hideto";
  18. send_data.age = 23;
  19. socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
  20. socket.connect("localhost", 8888);
  21. socket.writeUTFBytes(JSON.encode(send_data));
  22. socket.flush();
  23. myField.x = 20;
  24. myField.y = 30;
  25. myField.text = "test";
  26. myField.autoSize = TextFieldAutoSize.LEFT;
  27. addChild(myField);
  28. }
  29. private function onSocketData(event:ProgressEvent):void {
  30. while(socket.bytesAvailable) {
  31. var recv_data:* = JSON.decode(socket.readUTFBytes(socket.bytesAvailable));
  32. myField.text = "Name: " + recv_data.name + ", age: " + recv_data.age.toString();
  33. }
  34. }
  35. }
  36. }

运行Erlang服务器端:

  1. Eshell> c(server).
  2. Eshell> server:start().
  3. "{\"name\":\"Hideto\",\"age\":23}"
  4. Name: "Hideto", Age: 23

这里打印出了Erlang Socket Server接收到的AS3 Client发过来的JSON decode过的一个person对象

运行AS3客户端: 
client.html上首先显示“test”,然后异步处理完Socket消息发送和接受后,decode Erlang Server端发过来的person对象,将页面上的TextField替换为“Name: Hideto2, age: 24”

Erlang与ActionScript3采用JSON格式进行Socket通讯的更多相关文章

  1. Delphi用QJSON解析JSON格式的数据

    本来用superobject来解析JSON已经够用了,可惜这个东东不能在移动端使用,于是找到QJSON来处理. 这是一个国内高手写开源免费的东西,赞一个. 假入数据如下: {"message ...

  2. Android 自定义 ListView 显示网络上 JSON 格式歌曲列表

    本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...

  3. Delphi用QJSON解析JSON格式的数据 【转】

    本来用superobject来解析JSON已经够用了,可惜这个东东不能在移动端使用,于是找到QJSON来处理. 这是一个国内高手写开源免费的东西,赞一个. 假入数据如下: {"message ...

  4. linux c 使用socket 发送http请求 可以发送json格式数据

    #include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#include <time.h ...

  5. plist文件、NSUserDefault 对文件进行存储的类、json格式解析

    ========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...

  6. Json格式应用

    Json格式在用于数据存储方面比xml有着空间上的优势,Json格式又主要分为两种格式:名称/值 对 和数组. 在我的业务环境中需要先把一种空间比较小的格式. 测试如下: 取数据库中的一张表然后生成两 ...

  7. iOS开发之JSON格式数据的生成与解析

    本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...

  8. elk系列3之通过json格式采集Nginx日志

    preface 公司采用的LNMP平台,跑着挺多nginx,所以可以利用elk好好分析nginx的日志.下面就聊聊它吧. 下面的所有操作都在linux-node2上操作 安装Nginx nginx是开 ...

  9. volley post非json格式数据并获取json数据

    在使用JsonObjectRequest时无法post非json格式的数据,因而采用StringRequest获取到相应的数据后再转为json格式的数据. //这里的上下文需要讨论 private s ...

随机推荐

  1. 关于hadoop hdfs里文件为啥上一级大小是0,进去又有大小问题解释?

    问题 好像跟平时的理解不一样,外边是0,进去就是有大小了? 答:hdfs具体文件是针对具体文件的,不是文件目录.    文件夹大小为0,不是里面所有内容为0.

  2. Spark 概念学习系列之Spark存储管理机制

    Spark存储管理机制 概要 01 存储管理概述 02 RDD持久化 03 Shuffle数据存储 04 广播变量与累加器 01 存储管理概述 思考: RDD,我们可以直接使用而无须关心它的实现细节, ...

  3. ios系统和某些移动端background-attachment:fixed不兼容性

    固定背景不动:background-attachment:fixed; ios系统和某些移动端background-attachment:fixed不兼容性,没有任何效果,但可以hack一下就可以了, ...

  4. 15、python学习手册之:列表和字典

    1.列表属于可变序列,支持在原处的修改 2.在标准python解锁器内部,列表就是C数组而不是链接结构 3.内置函数map对序列中的各项应用一个函数并把结果收集到一个新的列表中 eg:list(map ...

  5. 【iOS开发系列】颜色渐变

    记录: //Transparent Gradient Layer - (void) insertTransparentGradient { UIColor *colorOne = [UIColor c ...

  6. 使用PHP实现双向队列

    使用PHP实现双向队列 一.总结 就是几个array函数 push pop shift unshift n. 移动:变化:手段:轮班 vi. 移动:转变:转换 vt. 转移:改变:替换 二.使用PHP ...

  7. thinkphp事务机制

    thinkphp事务机制 一.总结 下面文章也要看,下面有抛出异常(自己提供错误信息那种) 1.事务机制(原子性):所有的事情都完成了就提交,否则回滚.电商里面用的多,付钱买东西的时候. 2.样例(简 ...

  8. HttpClient证书回调问题解决

    /// <summary>        /// httpclient请求        /// </summary>        /// <param name=&q ...

  9. workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)

    workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...

  10. FireBreath与JS交互1

    FireBreath提供接口供JS调用,提供的接口需要注册 必须在JSAPI对象的构造函数中注册,也就是 CxxxAPI::CxxxAPI()这个函数中调用 registerMethod(" ...