首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

Titanium中的socket通讯

2012-08-15 
Titanium中的socket通信Titanium从1.7开始强化了TCP通信方面的功能。一般大家说的通信都指的是HTTP通信,今

Titanium中的socket通信
Titanium从1.7开始强化了TCP通信方面的功能。一般大家说的通信都指的是HTTP通信,今天我们使用TCP socket,就可以跟很多的service实现通信。

在socket的同时,Titanium也支持二进制码的操作:
T.Buffer
Ti.Codec
但是稍微有些复杂,HTTP以外的协议也能够使用。

那么我们就尽早的看看socket通信的例子吧。

var win = Ti.UI.createWindow({ title: "Win1" });var textarea = Ti.UI.createTextArea({value: ''});win.add(textarea);win.open();// 读数据用Buffervar readBuffer = Ti.createBuffer({length:1024});// socket部分var socket;socket = Ti.Network.Socket.createTCP({  host: "blog.masuidrive.jp",  port: 80,  connected: function(e) { // 连接到socket    textarea.value += ">> Connected to host " + socket.host + "\n";    // 组成要写入的二进制数据    var data = Ti.createBuffer({value:"GET /tmp/test.html HTTP/1.1\r\n"+      "Host: blog.masuidrive.jp\r\n\r\n"});    // 写入到socket    var bytesWritten = socket.write(data);    var bytesRead;    // 循环读取直到结束    while( (bytesRead = socket.read(readBuffer)) >= 0 ) {      // 将读取的二进制转化为字符串    var stringData = Ti.Codec.decodeString({      source: readBuffer, length: bytesRead });    textarea.value += bytesRead + "> " + stringData + "\n";    // 清空读取用Buffer    readBuffer.clear();    }    // 关闭socket    socket.close();  },  closed: function(e) { // socket关闭之后    textarea.value += ">> Socket closed";  }});socket.connect();




上边的代码中的socket是同步的。具体socket通信的详细内容这里就不说了,相信在其他的平台上使用过socket的人都能够理解。Titanium官方也有详细的说明,这里

但是我们在通常的应用中都是采用异步的socket通信。可惜这部分在官方文档中也没有。

异步的socket处理大概是下边这样的:
var win = Ti.UI.createWindow({ title: "Win1" });var textarea = Ti.UI.createTextArea({value: ''});win.add(textarea);win.open();var socket;var readBuffer = Ti.createBuffer({length:1024});// 数据被读入时调用var readCallback = function(e) {    // 数据完成后关闭socket    if (e.bytesProcessed == -1) { // EOF    textarea.value += ">> Received socket closed\n";    socket.close();        return;    }    // 显示读入的数据    var str = Ti.Codec.decodeString({source:readBuffer, length:e.bytesProcessed});    textarea.value += e.bytesProcessed + "> " + str + "\n";    // 下回读入数据时设定Buffer和回调    Ti.Stream.read(socket, readBuffer, readCallback);};socket = Ti.Network.Socket.createTCP({    host: "blog.masuidrive.jp",    port: 80,    connected: function(e) {        // 读入数据时Buffer和回调    Ti.Stream.read(socket, readBuffer, readCallback);        textarea.value += ">> Connected to host " + socket.host + "\n";        // 写入处理        var data = Ti.createBuffer({value:"GET /tmp/test.html HTTP/1.1\r\nHost: blog.masuidrive.jp\r\n\r\n"});        var bytesWritten = socket.write(data);    },    closed: function(e) {        textarea.value += ">> Socket closed";    }});socket.connect();


这次在读入数据时,调用了readCallback。使用这样的方法,利用TCP基本所有的协议都能实现通信。

WebSocket协议的一个例子:https://github.com/masuidrive/ti-websocket-client

实时聊天,或者不想上时间保持会话时候,不使用HTTP,而使用WebSocket实现是不错的选择。

【原文】Titanium Mobileでソケット通信

热点排行