安卓 html5 udp通信,HTML5的TCP和UDP Web Socket API草案定稿

这是在Web上实现UDP/TCP API的草案,沿未形成标准。该标准的一大亮点就是使用内置Promise设计模式,替代了传统JavaScript中的事件触发回调。不过各大浏览器厂商

这是在Web上实现UDP/TCP API的草案,沿未形成标准。该标准的一大亮点就是使用内置Promise设计模式,替代了传统JavaScript中的事件触发回调。不过各大浏览器厂商会不会这样实现还要打一个问号,毕竟编写标准的学院派和实现标准的行业派很难达到完全统一。

以下内容来自:

接口标准提供对原始UDP套接字(Socket),TCP客户端套接字和TCP服务器套接字API的定义。

简介

这部分沿未形成规范。您可以使用该API来发送和接收数据,并使用TCP或UDP网络。

使用此API的部分用例:

本地网络多播服务(multicast service)发掘,例如UPnP/ SSDP和mDNS

一个UDP的例子:

//

// This example shows a simple implementation of UPnP-SSDP M-SEARCH

// discovery using a multicast UDPSocket

//

var address = '239.255.255.250',

port = '1900',

serviceType = 'upnp:rootdevice',

rn = '\r\n',

search = '';

//  Create a new UDP client socket

var mySocket = new UDPSocket();

// Build an SSDP M-SEARCH multicast message

search += 'M-SEARCH * HTTP/1.1' + rn;

search += 'ST: ' + serviceType + rn;

search += 'MAN: "ssdp:discover"' + rn;

search += 'HOST: ' + address + ':' + port + rn;

search += 'MX: 10';

// Receive and log SSDP M-SEARCH response messages

function receiveMSearchResponses() {

// While data in buffer, read and log UDP message

while (mySocket.readable.state === "readable") {

var msg = mySocket.readable.read();

console.log ('Remote address: ' + msg.remoteAddress +

' Remote port: ' + msg.remotePort +

'Message: ' + ab2str(msg.data));

// ArrayBuffer to string conversion could also be done by piping

// through a transform stream. To be updated when the Streams API

// specification has been stabilized on this point.

}

// Wait for SSDP M-SEARCH responses to arrive

mySocket.readable.wait().then(

receiveMSearchResponses,

e => console.error("Receiving error: ", e);

);

}

// Join SSDP multicast group

mySocket.joinMulticast(address);

// Send SSDP M-SEARCH multicast message

mySocket.writeable.write(

{data : str2ab(search),

remoteAddress : address,

remotePort : port

}).then(

() => {

// Data sent sucessfully, wait for response

console.log('M-SEARCH Sent');

receiveMSearchResponses();

},

e => console.error("Sending error: ", e);

);

// Log result of UDP socket setup.

mySocket.opened.then(

() => {

console.log("UDP socket created sucessfully");

},

e =>console.error("UDP socket setup failed due to error: ", e);

);

// Handle UDP socket closed, either as a result of the application

// calling mySocket.close() or an error causing the socket to be

closed.

mySocket.closed.then(

() => {

console.log("Socket has been cleanly closed");

},

e => console.error("Socket closed due to error: ", e);

);复制代码

相比UDP,TCP的示例代码显得简单一些

//

// This example shows a simple TCP echo client.

// The client will send "Hello World" to the server on port **9 and log

// what has been received from the server.

//

//  Create a new TCP client socket and connect to remote host

var mySocket = new TCPSocket("127.0.0.1", **9);

// Send data to server

mySocket.writeable.write("Hello World").then(

() => {

// Data sent sucessfully, wait for response

console.log("Data has been sent to server");

mySocket.readable.wait().then(

() => {

// Data in buffer, read it

console.log("Data received from server:" + mySocket.readable.read());

// Close the TCP connection

mySocket.close();

},

e => console.error("Receiving error: ", e);

);

},

e => console.error("Sending error: ", e);

);

// Signal that we won't be writing any more and can close the write half of the connection.

mySocket.halfClose();

// Log result of TCP connection attempt.

mySocket.opened.then(

() => {

console.log("TCP connection established sucessfully");

},

e =>console.error("TCP connection setup failed due to error: ", e);

);

// Handle TCP connection closed, either as a result of the application

// calling mySocket.close() or the other side closed the TCP

// connection or an error causing the TCP connection to be closed.

mySocket.closed.then(

() => {

console.log("TCP socket has been cleanly closed");

},

e => console.error("TCP socket closed due to error: ", e);

);复制代码

有什么问题可在Github上面给他们开Issues:, 不过关注者廖廖(14个star目前): https://github.com/sysapps/tcp-udp-sockets/issues

本文转载自:

《编译原理》是计算机科学中一门极为重要的课程,主要探讨如何将高级程序设计语言转换成机器可执行的指令。清华大学的张素琴教授在这一领域有着深厚的学术造诣,其编译原理课后习题答案对于学习者而言是非常珍贵的资源。这份压缩文件详细解析了课程中所涉及的概念、理论和方法的实践应用,目的是帮助学生更好地理解编译器设计的核心内容。 编译原理的核心知识点主要包括以下几点: 词法分析:作为编译过程的首要环节,词法分析器会扫描源代码,识别出一个个称为“标记”(Token)的最小语法单位。通常借助正则表达式来定义各种标记的模式。 语法分析:基于词法分析产生的标记流,语法分析器依据文法规则构建语法树。上下文无关文法(CFG)是编译器设计中常用的一种形式化工具。 语义分析:这一步骤用于理解程序的意义,确保程序符合语言的语义规则。语义分析可分为静态语义分析和动态语义分析,前者主要检查类型匹配、变量声明等内容,后者则关注运行时的行为。 中间代码生成:编译器通常会生成一种高级的中间表示,如三地址码或抽象语法树,以便于后续的优化和目标代码生成。 代码优化:通过消除冗余计算、改进数据布局等方式提升程序的执行效率,同时不改变程序的语义。 目标代码生成:根据中间代码生成特定机器架构的目标代码,这一阶段需要考虑指令集体系结构、寄存器分配、跳转优化等问题。 链接:将编译后的模块进行合并,解决外部引用,最终形成一个可执行文件。 错误处理:在词法分析、语法分析和语义分析过程中,编译器需要能够检测并报告错误,例如语法错误、类型错误等。 张素琴教授的课后习题答案覆盖了上述所有核心知识点,并可能包含实际编程练习,比如实现简单的编译器或解释器,以及针对特定问题的解题策略。通过解答这些习题,学生可以加深对编译原理的理解,提升解决问题的能力,为今后参与编译器开发或软件工程实践奠定坚实的基础。这份资源不仅是学习编译原理的有力辅助材料,也是
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值