`
rensanning
  • 浏览: 3538441 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37958
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:606451
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:681075
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:88691
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401225
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69548
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91410
社区版块
存档分类
最新评论

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();

// 读数据用Buffer
var 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でソケット通信
  • 大小: 37.3 KB
分享到:
评论

相关推荐

    serversocketexe:使用java进行socket通信的例子

    使用没有多线程的 java 进行套接字通信的示例。 编译 javac GreetingServer.java javac GreetingClient.java 跑步 *Server:* java GreetingServer *Client:* java GreetingClient <host> 例子 $ java ...

    socket-io-test:插座我测试

    Socket.IO 是一个实时应用框架,它为开发人员提供了一种简单的方式来实现在Web上进行双向通信,即服务器和客户端之间的实时、低延迟的数据传输。它建立在Node.js的基础之上,并利用了WebSocket协议,同时提供了在...

    C#写的一个代理服务器

    你需要创建ServerSocket监听特定端口,接收客户端连接请求,然后创建新的Socket实例与目标服务器通信。 2. **数据转发**:当代理服务器接收到客户端的请求时,它需要将这些请求转发到目标服务器。这涉及到对HTTP或...

    Funxster-Chat-:聊天以练习Socket.io和RWD

    Socket.io是一款实时通信库,它允许Web应用程序实现实时、双向通信,极大地提升了用户体验,尤其是在构建聊天应用、在线游戏或任何需要即时交互功能的场景下。而响应式网页设计(RWD)则是现代网站开发的一个关键...

    JavaLanChat:JavaLanChat一个简单的基于桌面的Lanchat应用程序,使用Java的swing和socket编程

    在JavaLanChat中,Socket被用来创建客户端与服务器之间的通信链路。每个用户都可能作为一个客户端,通过Socket连接到服务器,发送自己的消息,并监听服务器返回的消息。ServerSocket类用于在服务器端创建一个监听套...

    HTML在LBS社区中的应用PPT教案.pptx

    Web Socket是HTML5的一项通信协议,它实现了持久连接,允许数据双向实时传输,这对于LBS社区中的即时通讯和推送服务至关重要。通过Web Socket,用户可以在社区内进行实时聊天、动态分享,提高社区的互动性和实时性。...

    java-comm-server-client-multithread

    在IT行业中,Java是一种广泛应用的编程语言,尤其在构建服务器端应用、客户端应用以及多线程通信方面。项目"java-comm-server-client-multithread"显然关注的是如何使用Java实现一个支持多线程的服务器-客户端通信...

    lab4

    最后,如果“lab4”涉及到网络编程,那么Socket通信和HTTP协议可能是学习的重点。Java提供Socket类和ServerSocket类来支持客户端-服务器模型的通信,而HttpClient库可以帮助处理HTTP请求和响应。 总之,“lab4”...

    SteamNetworkService:蒸汽网络服务

    在Java中,我们通常使用`java.net.Socket`和`java.net.ServerSocket`类来处理TCP连接。 其次,为了处理大量的并发连接,我们需要熟悉多线程或异步I/O的概念。Java中的`java.lang.Thread`类可以创建并管理线程,而...

    IO_Chat:OI_Chat

    8. **Socket.IO**:在JavaScript中,Socket.IO库提供了一种跨平台、兼容多种浏览器的WebSocket实现,它能自动降级到其他通信方式(如轮询),确保在不同环境下都能实现实时通信。 9. **事件驱动编程**:由于...

    JavaLesson:JAVA实验报告源代码

    - **Socket编程**:通过Socket和ServerSocket实现客户端-服务器通信。 - **HTTP请求**:发送HTTP请求获取Web资源,理解HTTP协议的基础知识。 8. **Java标准库** - **日期时间API**:使用java.time包中的类处理...

    health_server_example

    1. **Python网络编程**:Python是常用的语言来编写服务器端应用,因为它拥有丰富的库支持,如`socket`模块,可以用来创建基本的TCP或UDP服务器,处理网络通信。 2. **HTTP服务器**:由于标题中没有明确提到协议,但...

    Nodejs-Curso:通过API和NodeNode.js开发的API。

    在Node.js中,可以使用ws或socket.io库来实现WebSocket通信,常用于实时聊天、游戏、股票更新等场景。 **错误处理** 在Node.js开发中,良好的错误处理机制至关重要。可以使用try-catch语句捕获异常,或者在Express...

    BluffinMuffin.AIClient:与AI的BluffinMuffin扑克游戏兼容的客户端

    为了实现网络通信,BluffinMuffin.AIClient可能会使用Python的网络编程库,如socket或者更高级别的库如Twisted或asyncio,以便与服务器交换游戏状态和玩家决策。这些库使得客户端能实时接收和发送数据,保证游戏的...

    jdk-read:jdk原始码学习

    7. **网络编程**:探索Socket通信、URL连接、HTTP客户端的实现,以及Java对WebSocket、SSL/TLS的支持。 8. **异常处理**:理解异常的分类、捕获和抛出机制,以及如何编写健壮的异常处理代码。 9. **泛型**:探讨...

    Sanum:用于健康和健身的生活方式社交应用程序

    为了实现社交功能,Sanum可能集成了WebSocket或Socket.IO,提供实时通信,使得用户可以即时聊天、分享进度或参与挑战。此外,应用可能还涉及API集成,如Google Fit或Apple HealthKit,以便同步用户的健康数据。 在...

    sdi2021-604-lab-node:NodeJS的实用功能

    3. **Socket.IO**:提供实时、双向通信功能,用于构建实时应用,如聊天室、在线游戏等,通过WebSocket协议实现。 4. **NPM**:Node.js的包管理器,用于安装、管理和共享代码库,是Node.js生态的重要组成部分。 5. ...

    Lesson_3.0:LESSON_3

    10. **网络编程**:Java提供了Socket编程和ServerSocket类,使得开发者能够创建客户端和服务器端应用,进行网络通信。 11. **反射**:反射API允许我们在运行时检查类的信息,如类名、方法、字段等,并能够动态地...

    chatterbox-client

    2. **实时通信**:聊天应用需要实现实时通信,这通常通过WebSocket或Socket.IO等技术实现,它们允许客户端和服务器之间进行双向、即时的数据交换。 3. **API接口**:客户端需要与后端服务器交互,发送和接收消息。...

    测试

    9. **网络编程**:Java提供了Socket和ServerSocket类,可以方便地进行客户端-服务器通信。 10. **JVM(Java虚拟机)**:Java代码编译成字节码(.class文件),由JVM执行,实现了跨平台能力。 11. **泛型**:Java...

Global site tag (gtag.js) - Google Analytics