Erlang与ActionScript3采用JSON格式进行Socket通讯
http://hideto.iteye.com/blog/235811
需要下载as3corelib来为ActionScript3处理JSON codec
server.erl
- -module(server).
- -export([start/0,start/1,process/1]).
- -define(defPort, 8888).
- start() -> start(?defPort).
- start(Port) ->
- case gen_tcp:listen(Port, [binary, {packet, 0}, {active, false}]) of
- {ok, LSock} -> server_loop(LSock);
- {error, Reason} -> exit({Port,Reason})
- end.
- %% main server loop - wait for next connection, spawn child to process it
- server_loop(LSock) ->
- case gen_tcp:accept(LSock) of
- {ok, Sock} ->
- spawn(?MODULE,process,[Sock]),
- server_loop(LSock);
- {error, Reason} ->
- exit({accept,Reason})
- end.
- %% process current connection
- process(Sock) ->
- Req = do_recv(Sock),
- io:format("~p~n", [Req]),
- {ok, D, []} = rfc4627:decode(Req),
- {obj, [{"name", _Name}, {"age", Age}]} = D,
- Name = binary_to_list(_Name),
- io:format("Name: ~p, Age: ~p~n", [Name, Age]),
- Resp = rfc4627:encode({obj, [{"name", 'Hideto2'}, {"age", 24}]}),
- do_send(Sock,Resp),
- gen_tcp:close(Sock).
- %% send a line of text to the socket
- do_send(Sock,Msg) ->
- case gen_tcp:send(Sock, Msg) of
- ok -> ok;
- {error, Reason} -> exit(Reason)
- end.
- %% receive data from the socket
- do_recv(Sock) ->
- case gen_tcp:recv(Sock, 0) of
- {ok, Bin} -> binary_to_list(Bin);
- {error, closed} -> exit(closed);
- {error, Reason} -> exit(Reason)
- end.
Person.as
- package
- {
- public class Person
- {
- public var name:String;
- public var age:int;
- public function Person()
- {
- }
- }
- }
Client.as
- package {
- import com.adobe.serialization.json.JSON;
- import flash.display.Sprite;
- import flash.events.*;
- import flash.net.Socket;
- import flash.text.*;
- public class Client extends Sprite
- {
- private var socket:Socket;
- private var myField:TextField;
- private var send_data:Person;
- public function Client()
- {
- socket = new Socket();
- myField = new TextField();
- send_data = new Person();
- send_data.name = "Hideto";
- send_data.age = 23;
- socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
- socket.connect("localhost", 8888);
- socket.writeUTFBytes(JSON.encode(send_data));
- socket.flush();
- myField.x = 20;
- myField.y = 30;
- myField.text = "test";
- myField.autoSize = TextFieldAutoSize.LEFT;
- addChild(myField);
- }
- private function onSocketData(event:ProgressEvent):void {
- while(socket.bytesAvailable) {
- var recv_data:* = JSON.decode(socket.readUTFBytes(socket.bytesAvailable));
- myField.text = "Name: " + recv_data.name + ", age: " + recv_data.age.toString();
- }
- }
- }
- }
运行Erlang服务器端:
- Eshell> c(server).
- Eshell> server:start().
- "{\"name\":\"Hideto\",\"age\":23}"
- 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通讯的更多相关文章
- Delphi用QJSON解析JSON格式的数据
本来用superobject来解析JSON已经够用了,可惜这个东东不能在移动端使用,于是找到QJSON来处理. 这是一个国内高手写开源免费的东西,赞一个. 假入数据如下: {"message ...
- Android 自定义 ListView 显示网络上 JSON 格式歌曲列表
本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...
- Delphi用QJSON解析JSON格式的数据 【转】
本来用superobject来解析JSON已经够用了,可惜这个东东不能在移动端使用,于是找到QJSON来处理. 这是一个国内高手写开源免费的东西,赞一个. 假入数据如下: {"message ...
- linux c 使用socket 发送http请求 可以发送json格式数据
#include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#include <time.h ...
- plist文件、NSUserDefault 对文件进行存储的类、json格式解析
========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...
- Json格式应用
Json格式在用于数据存储方面比xml有着空间上的优势,Json格式又主要分为两种格式:名称/值 对 和数组. 在我的业务环境中需要先把一种空间比较小的格式. 测试如下: 取数据库中的一张表然后生成两 ...
- iOS开发之JSON格式数据的生成与解析
本文将从四个方面对IOS开发中JSON格式数据的生成与解析进行讲解: 一.JSON是什么? 二.我们为什么要用JSON格式的数据? 三.如何生成JSON格式的数据? 四.如何解析JSON格式的数据? ...
- elk系列3之通过json格式采集Nginx日志
preface 公司采用的LNMP平台,跑着挺多nginx,所以可以利用elk好好分析nginx的日志.下面就聊聊它吧. 下面的所有操作都在linux-node2上操作 安装Nginx nginx是开 ...
- volley post非json格式数据并获取json数据
在使用JsonObjectRequest时无法post非json格式的数据,因而采用StringRequest获取到相应的数据后再转为json格式的数据. //这里的上下文需要讨论 private s ...
随机推荐
- java poi 向excel写入图片
import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; impo ...
- Android开发之搜芽项目的图片载入问题(使用Volley进行网络图片载入)
搜芽的移动开发这几天进度相对来说很的快. 可是美中不足的就是网络图片的载入问题. 我有两套方案: 1)沿用迅雷动漫的图片载入.迅雷动漫也是用的一个开源的库.可是不知道是我使用出了问题还是真的是它的问题 ...
- amazeui学习笔记--css(HTML元素5)--表格Table
amazeui学习笔记--css(HTML元素5)--表格Table 一.总结 1.基本样式:am-table:直接模块名 <table class="am-table"& ...
- 国内技术管理人员批阅google的“春运交通图”项目
在整理一份报告的时候,偶然看到2008年春节期间google推出的“春运交通图”项目建设历程报道,很受启发,随以国内的技术管理人员眼光批阅了这篇文章,同时也是自嘲吧. 以下黑色字体是原报道,红色字体是 ...
- iOS开发 非常全的三方库、插件、大牛博客等等
UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件. SVPullToRefresh- 下拉刷新控件. MJRefresh- 仅需一行代码就可以为UITableVie ...
- Android内存优化(使用SparseArray和ArrayMap取代HashMap)
在Android开发时,我们使用的大部分都是Java的api,比方HashMap这个api,使用率非常高,可是对于Android这样的对内存非常敏感的移动平台,非常多时候使用一些java的api并不能 ...
- swift 利用 Reflect(字典转模型)
1. 导入Reflect(字典转模型)框架 2. 让它继承Reflect这个类,如下代码所示: class IWUser: Reflect { /** * 用户的ID */ var idstr:N ...
- BaaS简介
SaaS(软件即服务:Software as a Service).IaaS(基础设施即服务:Infrastructure as a Service)和PaaS(平台即服务:Platform as a ...
- 使用u盘量产工具修复写保护的u盘
自己的u盘突然提示写保护,而且也没有写保护开关,怎么都写不进文件,试了很多办法都无法去除写保护,最后找了一个u盘量产工具,搞定: 插上u盘后,会检测到u盘,点“开始"后静静等待它完成,u盘又 ...
- Android中ImageView.ScaleType属性值
1 android:scaleType="center" (1)当图片大于ImageView的宽高:以图片的中心点和ImageView的中心点为基准,按照图片的原大小居中显示,不缩 ...