技术标签: 智能硬件 websocket http 物联网 网络协议 tcp/ip IoT iot
学历代表过去、能力代表现在、学习力代表将来。 一个良好的学习方法是通过输出来倒逼自己输入。写博客既是对过去零散知识点的总结和复盘,也是参加了 零声教育 写博客活动。
零声教育体验课:https://xxetb.xetslk.com/s/3fbO81
本文是开发过程中的知识点总结,供大家学习交流使用,如有任何错误或不足之处,请在评论区指出。
如图,左边为 ISO/OSI
7层模型,右边是 TCP/IP
4层模型,中间为各层对应的协议。
C
和服务器/S
之间传输和交换Web页面和数据。IEEE 802.11 ax
为Wi-FI 6,在通信过程中一般在底层会把包转换以太网格式,因此在 tcpdump 等工具抓出来的包显示的是以太网包。IEEE 802.11 a/g/n/ax
)无线局域网(WLAN
)标准,它规定了无线网络的各种方面,包括传输速率、频谱利用、安全性等。
如图,Ethernet II 数据包格式:
如图,在MQTT协议中,有三个重要的角色:发布者(Publisher)、代理(Broker) 和 订阅者(Subscriber)。
发布者(Publisher)
发布者是MQTT网络中的客户端,负责发布(发送)消息到MQTT代理(Broker)。发布者将消息发送到一个或多个主题(Topic),并且可以选择消息的服务质量级别(QoS)。
代理(Broker)
代理是MQTT网络中的中介,负责接收发布者发布的消息,并将其传递给订阅者。它负责维护订阅者与发布者之间的关系,处理订阅和取消订阅的请求,并确保消息按照订阅者的需求进行传递。
订阅者(Subscriber)
订阅者是MQTT网络中的客户端,负责订阅(接收)一个或多个主题(Topic)的消息。订阅者告知代理它感兴趣的主题,然后代理在有新消息发布时将其传递给订阅者。
固定头部(Fixed Header):
位 | 字段 | 描述 |
---|---|---|
0-3 | 控制报文类型 | 指示数据包的类型,如CONNECT、PUBLISH等。 |
4 | DUP | 指示消息是否是重发的副本。 |
5-6 | QoS | 指示消息的服务质量级别。 |
7 | RETAIN | 指示代理是否应保留已发布的消息。 |
8+ | 剩余长度(RL) | ① 编码剩余长度字段,表示可变头部和有效载荷的总长度。 最多可以使用4个字节来编码长度字段。 ② 最高位为0表示剩余长度的编码结束, 7个比特位用于表示长度的最低7位。 ③ 每个字节的最高位为1, 表示后续还有剩余长度字段, 剩下的7个比特位用于表示长度的下一个字节。 ④ MAX=268435455 (0xFF, 0xFF, 0xFF, 0x7F)。 |
控制报文类型 | 值 | 描述 |
---|---|---|
Reserved | 0 | 保留,不使用。 |
CONNECT | 1 | 客户端请求连接到代理。 |
CONNACK | 2 | 代理对 CONNECT 请求的响应。 |
PUBLISH | 3 | 发布消息到指定主题。 |
PUBACK | 4 | 对 QoS 1 的 PUBLISH 报文的确认。 |
PUBREC | 5 | 对 QoS 2 的 PUBLISH 报文的接收。 |
PUBREL | 6 | 对 QoS 2 的 PUBLISH 报文的释放。 |
PUBCOMP | 7 | 对 QoS 2 的 PUBLISH 报文的完成。 |
SUBSCRIBE | 8 | 订阅一个或多个主题。 |
SUBACK | 9 | 对 SUBSCRIBE 报文的确认。 |
UNSUBSCRIBE | 10 | 取消订阅一个或多个主题。 |
UNSUBACK | 11 | 对 UNSUBSCRIBE 报文的确认。 |
PINGREQ | 12 | 客户端发送心跳请求。 |
PINGRESP | 13 | 代理对 PINGREQ 请求的响应。 |
DISCONNECT | 14 | 客户端主动断开连接。 |
Reserved | 15 | 保留,不使用。 |
QoS | 值 | 描述 |
---|---|---|
0 | 0 | 最多一次传输(At most once):消息可能丢失。 |
1 | 1 | 至少一次传输(At least once):消息至少被传输一次,但可能会重复。 |
2 | 2 | 有且仅有一次传输(Exactly once):确保消息仅被传输一次。 |
可变头部(Variable Header):
根据报文类型的不同,可变头部的内容也不同(不是所有的类型都有可变头)。例如,CONNECT 报文的可变头部包含协议版本号、连接标志等。具体如下表所示:
可变头部的数据包标识符字段在几种数据包类型中是共同存在的,具体是否存在,如下表:
有效载荷(Payload):Payload 数据段是 MQTT 数据包中实际传输的部分,它是实现 MQTT 消息传输的核心。
HTTP(,超文本传输协议)是一种用于传输超文本的应用层协议,它是万维网的基础。HTTP 被用于在 Web 浏览器和 Web 服务器之间传递数据。
HTTP 版本 | RFC 文档 | 发布时间 | 主要特性 |
---|---|---|---|
HTTP/0.9 | RFC 1945 | 1990 | - 最初的版本,只支持 GET 方法 - 响应内容是 HTML 格式 |
HTTP/1.0 | RFC 2068 | 1996 | - 引入了请求头和响应头 - 支持更多的请求方法和状态码 |
HTTP/1.1 | RFC 2616 RFC 7230-7235 |
1997 2014 |
- 当前互联网使用最广 - 引入持久连接,提高性能 - 支持管道化,允许并行发送多个请求 - 引入 Host 头字段,支持虚拟主机 - 协议参考这里 |
HTTP/2 | RFC 7540 | 2015 | - 使用二进制格式进行传输,减少了传输的开销 - 引入了头部压缩机制,减少了头部的大小 - 支持多路复用,允许在单个连接上发送多个请求和响应 |
HTTP/3 | RFC 9114 | 2019 | - 基于 QUIC 协议,提供更快的连接建立和数据传输 - 改善了性能和安全性,减少了网络延迟 |
消息格式 | 说明 |
---|---|
起始行/请求行/状态行 | 包含协议版本、状态码和状态消息(对于响应消息) 请求方法、请求URI和协议版本(对于请求消息)。 |
0或多个请求头 | 包含一系列键值对,每个键值对描述了消息的一些信息,如Content-Type 、Content-Length 等。每个键值对以冒号分隔,键值对之间以换行符分隔。 |
空行 | 用于分隔请求头和消息体,通常只包含一个换行符,表示请求头结束。 |
可选消息体 | 包含具体的消息内容,如POST请求中的表单数据或服务器返回的HTML页面内容。对于GET请求,通常没有消息体。 |
空行 | 表示消息体的结束,后面没有其他内容。 |
具体消息格式如下图所示:
序号 | 请求方法 | 描述 |
---|---|---|
1 | GET | 请求指定的资源。 |
2 | POST | 向指定的资源提交数据进行处理请求(例如提交表单或上传文件)。 |
3 | PUT | 请求服务器存储一个资源,并用请求的数据替换指定的资源。 |
4 | DELETE | 请求服务器删除指定的资源。 |
5 | HEAD | 类似于GET请求,但服务器只返回请求头,不返回请求体。 |
6 | PATCH | 请求服务器对资源进行部分修改。 |
7 | OPTIONS | 请求查询服务器支持的HTTP请求方法和其他特性,在跨域请求的时候,在调用其它方法前,会调用此方法。 |
8 | TRACE | 用于测试远程服务器的性能。 |
序号 | 请求头 | 描述 |
---|---|---|
1 | User-Agent | 客户端标识,包含了客户端的软件类型、操作系统、软件版本等信息。 |
2 | Accept | 告诉服务器客户端能够处理的媒体类型和媒体类型的相对优先级。 |
3 | Content-Type | 请求或响应的实体的媒体类型。 |
4 | Content-Length | 请求或响应实体的长度(以字节为单位)。 |
5 | Host | 表示服务器的主机名和端口号。 |
6 | Cookie | 客户端向服务器发送的Cookie信息。 |
7 | Cache-Control | 控制缓存行为的指令,如no-cache、max-age等。 |
8 | Accept-Encoding | 告诉服务器客户端能够解码的编码方式。 |
9 | Accept-Language | 告诉服务器客户端偏好的自然语言。 |
10 | Referer | 表示请求的来源,即前一个页面的URL。 |
11 | Authorization | 包含客户端提供给服务器的身份验证凭证。 |
12 | Origin | 请求的来源,用于跨域请求。 |
13 | Connection | 控制是否保持连接,如keep-alive、close等。 |
14 | If-Modified-Since | 如果资源自指定日期以来没有被修改,则发送请求。 |
15 | If-None-Match | 如果资源与指定的ETag匹配,则发送请求。 |
序号 | 响应头 | 描述 |
---|---|---|
1 | Content-Type | 响应的实体的媒体类型。 |
2 | Content-Length | 响应实体的长度(以字节为单位)。 |
3 | Cache-Control | 控制缓存行为的指令,如no-cache、max-age等。 |
4 | Content-Encoding | 响应实体的编码方式,如gzip、deflate等。 |
5 | Server | 表示响应的服务器软件类型和版本号。 |
6 | Last-Modified | 表示响应实体的最后修改时间。 |
7 | Location | 重定向时新的URL。 |
8 | Set-Cookie | 服务器向客户端设置的Cookie信息。 |
9 | Expires | 表示响应的过期时间。 |
10 | ETag | 资源的唯一标识,用于缓存控制。 |
11 | Content-Disposition | 响应实体的处理方式,如inline、attachment等。 |
12 | Access-Control-Allow-Origin | 指定响应可以被哪些域访问。 |
13 | Access-Control-Allow-Headers | 指定响应可以被哪些请求头访问。 |
14 | Access-Control-Allow-Methods | 指定响应可以支持哪些HTTP方法。 |
15 | Access-Control-Allow-Credentials | 指定响应中是否包含凭证信息。 |
序号 | 状态码 | 描述 |
---|---|---|
1 | 100 | 继续。客户端应继续其请求。 |
2 | 101 | 切换协议。服务器正在协商切换协议。 |
3 | 200 | 请求成功。 |
4 | 201 | 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立。 |
5 | 204 | 服务器成功处理了请求,但不需要返回任何实体内容。 |
6 | 301 | 永久性重定向。 |
7 | 302 | 临时性重定向。 |
8 | 304 | 资源未修改,客户端可使用缓存数据。 |
9 | 400 | 请求参数有误。 |
10 | 401 | 需要身份验证。 |
11 | 403 | 服务器拒绝请求。 |
12 | 404 | 请求的资源不存在。 |
13 | 405 | 请求方法不被允许。 |
14 | 500 | 服务器内部错误。 |
15 | 502 | 网关错误。 |
16 | 503 | 服务不可用。 |
17 | 504 | 网关超时。 |
一种专为受限环境和物联网设备设计的轻量级通信协议。它被设计用于在资源受限的网络中进行低带宽、低功耗的通信。
主要特性如下:
CoAP
是面向网络的协议,使用类似于 HTTP
的特性,但也允许低开销、组播等。CoAP
使用 UDP
而不是像 TCP
那样使用复杂的拥塞控制。CoAP
采用了两层结构。UDP
和异步切换。4种消息类型:
消息类型 | 数值 | 描述 |
---|---|---|
Confirmable | 0 | 可确认的消息,需要接收到确认响应。 |
Non-confirmable | 1 | 不需要确认的消息,发送后不期望接收到响应。 |
Acknowledgment | 2 | 确认消息的响应,用于确认接收到 Confirmable 消息。 |
Reset | 3 | 重置消息,用于表示对某个消息的不理睬或超时。 |
可靠/不可靠消息传输
1
,其他值保留给未来版本使用。0
), Non-confirmable (1
), Acknowledgement (2
), 或 Reset (3
)。8
字节。c.dd
”,其中 c
=0-6,dd
=0-31。0xFF
。库名 | 语言 | 客/服务端支持 | 描述 | 链接 |
---|---|---|---|---|
aiocoap | Python 3 | Client + Server | Blockwise Transfers, Observe (partial) | aiocoap |
Californium | Java | Client + Server | Observe, Blockwise Transfers, DTLS | Californium |
cantcoap | C++/C | Client + Server | cantcoap | |
Canopus | Go | Client + Server | Core | Canopus |
CoAPSharp | C#, .NET | Client + Server | Core, Observe, Block, RD | CoAPSharp |
CoAPthon | Python | Client + Server + Forward Proxy + Reverse Proxy | Observe, Multicast server discovery, CoRE Link Format parsing, Block-wise | CoAPthon |
CoAP Shell | Java | Client | Observe, Blockwise Transfers, DTLS | CoAP Shell |
Copper | JavaScript | Client | Observe, Blockwise Transfers | Copper |
eCoAP | C | Client + Server | Core | eCoAP |
iCoAP | Objective-C | Client | Core, Observe, Blockwise Transfers | iCoAP |
jCoAP | Java | Client + Server | Observe, Blockwise Transfers | jCoAP |
libcoap | C | Client + Server | Observe, Blockwise Transfers, DTLS | libcoap |
LibNyoci | C | Client + Server | Core, Observe, Block, DTLS | LibNyoci |
lobaro-coap | C | Client + Server | Observe, Blockwise Transfers | lobaro-coap |
microcoap | C | Client + Server | microcoap | |
nCoap | Java | Client + Server | Observe, Blockwise Transfers, CoRE Link Format, Endpoint-ID-Draft | nCoap |
WebSocket
是一种在单个TCP
连接上提供全双工通信的网络协议。WebSocket
协议通过HTTP/HTTPS
端口(80/443
)与服务器进行握手,并在建立连接后使用自定义的WebSocket
协议进行通信。WebSocket
通常用于实现实时的Web
应用程序,如在线游戏、聊天应用程序、股票市场数据更新等。HTTP
请求/响应模式,使得服务端可以主动通知客户端,具有更低的延迟和更高的效率,同时可以减少服务器和客户端之间的通信开销。WebSocket
解决 HTTP
单向通信限制:WebSocket
解决 HTTP
服务端无法主动通知客户端:WebSocket
分层结构WebSocket
协议WebSocket
协议包括2部分:
握手/Handshake
HTTP
升级请求/响应。允许 HTTP
服务器与 WebSocket
网关或服务器共享它们的默认 HTTP
和 HTTPS
端口(80
和443
)。一旦连接建立,通信就会切换到 WebSocket
协议,该协议不符合 HTTP
协议。GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
101
之外的其他代码表示WebSocket握手尚未完成,仍然适用HTTP的语义。官方文档种定义两个URI方案,使用了ABNF语法(由[RFC5234]定义)和URI规范(由[RFC3986]定义)中定义的ABNF产生式。
ws-URI = "ws:" "//" host [ ":" port ] path [ "?" query ]
wss-URI = "wss:" "//" host [ ":" port ] path [ "?" query ]
host = <host, defined in [RFC3986], Section 3.2.2>
port = <port, defined in [RFC3986], Section 3.2.3>
path = <path-abempty, defined in [RFC3986], Section 3.3>
query = <query, defined in [RFC3986], Section 3.4>
opcode:
字段 | 描述 |
---|---|
FIN | 1=消息中的最后一个片段 |
RSV1, RSV2, RSV3 | 非零=扩展 |
MASK | 定义 “Payload 数据” 是否masked/被掩码处理 |
Masking-key | 0 或 4 字节的长度 |
Payload length | 7 位、7+16 位或 7+64 位的长度 |
Payload | 扩展数据 + 应用数据 |
WebSocket掩码处理是WebSocket协议中的一项安全机制,用于在客户端和服务器之间传输数据时对数据进行混淆,以防止第三方窃取或篡改数据。
j = i MOD 4
transformed-octet-i = original-octet-i XOR masking-key-octet-j
LWM2M是一种针对物联网设备设计的轻量级机器到机器通信协议,提供了高效的远程管理和通信能力,同时保持了低功耗和高安全性。这使得它成为物联网领域中的重要标准之一,广泛应用于各种物联网场景中。
LWM2M 架构由 对象(Objects)、**接口(Interfaces)**和 **协议栈(Stack)**组成。
在LWM2M分层结构中:
对象(Object)是最高级别的组织单位,每个对象代表了设备的一个功能或属性集合。每个对象由一个或多个资源(Resource)组成,资源表示对象的一个具体属性或功能。资源可以是只读的、可写的或可观察的,用于描述设备的状态、配置和控制。对象还可以包含一个或多个实例(Instance),实例用于区分具有相同功能的不同设备。
/{Object ID}/{Object Instance}/{Resource ID}
,示例如下图:生产消费模型如下:
AMQP交换机的类型,用于定义消息的路由规则和行为。
AMQP定义了几种主要的交换机类型,每种类型都有不同的路由策略和行为,提供了不同的消息路由策略,允许开发者根据应用场景选择最适合的交换机类型来实现消息的路由和传递,如下图3种交换机类型:
Direct Exchange(直连交换机): 直连交换机将消息根据指定的路由键(routing key)发送到与之完全匹配的队列中。它适用于一对一的消息传递,消息将被发送到唯一的队列中。
Fanout Exchange(广播交换机): 广播交换机将消息发送到所有与之绑定的队列中,忽略路由键。它适用于一对多的消息广播,消息将被发送到所有绑定的队列中。
Topic Exchange(主题交换机): 主题交换机根据消息的路由键和交换机与队列之间的绑定规则将消息发送到匹配的队列中。它支持通配符匹配,可以根据路由键的模式匹配将消息发送到多个队列中。
Headers Exchange(头交换机): 头交换机根据消息的头部属性将消息发送到与之匹配的队列中。它不依赖于路由键,而是根据消息头部的属性进行匹配。
Protocol | MQTT | CoAP | HTTP | Websocket | AMQP | XMPP | DDS | JMS | M3DA | STOMP | SNMP |
---|---|---|---|---|---|---|---|---|---|---|---|
Architecture | Client/Server | Client/Server | Client/Server | Client/Server | Client/Server | Client/Gateway/Server | Client/Server | Client/Server | Client/Server | Client/Server | Client/Server |
Model | Publish/Subscribe | Request/Response | Request/Response | N/A | Producer/Consumer | Publish/Subscribe | Publish/Subscribe | Publish/Subscribe | Message/Response | Producer/Consumer | Agent Mnanager |
Relationship | Many-to-Many | One-to-One | Many-to-One | One-to-One | Many-to-Many | Many-to-Many | Many-to-Many | Many-to-Many | One-to-One | Many-to-Many | Many-to-one |
Transfer Efficiency | High | High | General | High | High | General | High | General | High | General | General |
Time-validity | High | Poor | Poor | High | High | High | Very High | General | High | Poor | General |
Power consumption | General | Low | High | High | High | High | High | High | Low | High | High |
QoS Support | Yes | No | No | No | Yes | Yes | Yes | No | No | No | No |
Hard-Real-Time Capability | No | No | No | No | No | No | Yes | No | No | No | No |
Coding Way | Binary | Binary | Text(XML/JSON) | Binary/Text | Binary | XML | Binary | Binary | Binary | Text/Binary | ASN.1 |
Interoperability | Portion | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes |
2G, 3G, 4G Suitability (1000s nodes) |
Excellent | Excellent | Excellent | N/A | Excellent | Excellent | N/A | N/A | N/A | N/A | N/A |
LLN Suitability (1000s nodes) |
Fair | Excellent | Fair | N/A | Fair | Fair | N/A | N/A | N/A | N/A | N/A |
Resource Consumption | General | Low | General | General | General | General | General | High | Low | General | High |
Long Connection | Yes | No | No | Yes | Yes | Yes | N/A | Yes | N/A | Yes | No |
Security | Account/SSL/TLS | DTLS | SSL/TLS | SSL/TLS | SASL/SSL/TLS | SSL/TLS | SSL/TLS | SSL/TLS/JAAS | SSL/TLS/DTLS | SSL/TLS | DTLS |
Transport | TCP | UDP/SMS | TCP | TCP | TCP | TCP | UDP/IP | TCP(default) | HTTP/TCP/UDP/SMS | TCP | UDP |
IP | IP | 6LoWPAN | IP | IP | IP | IP | IP | IP | IP | IP | IP |
Implement | libumqtt | libcoap | curl | uWebSockets | OpenAMQ | Openfire | OpenDDS | OpenJMS | Mihini | libstomp | net-snmp |
Implement | mosquitto | microcoap | httpd | ws-rs | RabbitMQ | gloox | OpenSplice DDS | mom4j |
文章浏览阅读194次。Shell脚本自动部署(编译)LAMP平台LAMP是当下非常流行的一套Web架构,我们可以在GNU/Linux下通过其他人打包的程序包来进行安装; 但是在生产环境中,很多时候都需要我们自己定制安装AMP,编译安装LAMP有以下几个优点根据生产环境灵活定制程序优化编译参数,提高性能解决不必要的软件依赖友情提示:对编译安装有疑问的朋友, 查看我以前写的博客:教你使用rpm、yum..._shell脚本编排平台
文章浏览阅读2.9k次。目录文章目录目录1. 环境准备1.1 机器准备1.2 系统环境2. 升级操作系统3. 安装依赖包4. 安装4.1 下载安装包4.2 创建安装目录4.3 把下载的包上传到目录/opt/libreoffice7.1/中4.4 解压安装包4.5 分别进入解压之后的目录中执行安装命令4.6 确认安装是否成功5. 启动服务6. 查看端口或者进程是否启动1. 环境准备1.1 机器准备服务器ip主机名系统版本192.168.2.215myhostCentos7.21.2 系统环境_libreoffice7.1
文章浏览阅读1k次。文本分类任务中,CNN可以用来提取句子中类似N-Gram的关键信息,适合短句子文本。TextRNN擅长捕获更长的序列信息。具体到文本分类任务中,从某种意义上可以理解为可以捕获变长、单向的N-Gram信息(Bi-LSTM可以是双向)。_基于深度学习技术的文本情感分类
文章浏览阅读1.1w次,点赞20次,收藏183次。GIS地理空间数据免费获取国内:一、测绘地理信息局会提供权威的数据。需要进入全国地理信息资源目录服务系统网站(http://www.webmap.cn/main.do?method=index),该网站提供:30米全球地表覆盖数据,GlobeLand30能够提供包括:地理位置、分布范围和景观格局等直观的陆表地表覆盖的空间分布和信息。1:100万全国基础地理数据库全国1:100万基础地理数..._diva gis
文章浏览阅读170次。今天王者荣耀的服务器似乎出了点小问题,玩家在游戏里出现了许多BUG,所以官方对全服的玩家进行了一次不停机的更新,那么此次更新的内容相信大家都很想知道吧,小编为大家整理了相关的资讯,感兴趣的玩家就跟着小编一起来看看吧,希望能帮到你。王者荣耀7月17日进行了不停机更新维护,下面给大家带来具体的更新内容,一起来看看吧。亲爱的召唤师:我们计划在2019年7月17日 8:30-9:30 对全服进行不停机更新..._为什么王者荣耀今天不停机
文章浏览阅读460次,点赞8次,收藏9次。LGBM(Light Gradient Boosting Machine)可以用于解决二分类问题。事实上,LGBM在实际应用中被广泛用于分类问题,包括二分类问题。在使用LGBM进行二分类问题时,你可以指定目标变量的类型和相关参数。对于二分类问题,你可以使用。指定了二分类问题的目标。你可以根据具体问题和数据集的特点调整其他参数,以优化模型性能。表示使用对数损失作为损失函数,是二分类问题的默认设置。被用于创建一个二分类模型,_matlablgbm模型
文章浏览阅读7.1k次,点赞20次,收藏62次。本文章为上篇建模学习打卡第二天的续文章目录一、本次问题二、本题理解三、问题求解1.lingo实现(1)先抛除整数约束条件对问题求解(2)加入整数约束条件求解2.python实现求解(1)先抛除整数约束条件对问题求解(2)加入整数约束条件求解实现 通过 pulp 库求解(3)加入整数约束条件求解实现 分枝界定法求解一、本次问题二、本题理解目标函数:max = 40x1+90x2一级约束条件:9x1+7x2<=56..._lingo整数约束怎么写
文章浏览阅读924次。https://www.sevenforums.com/windows-updates-activation/119088-update-not-applicable-your-computer.html Belarc Advisor - Free Personal PC Audit Secunia Personal Security Inspector Download D..._win7the update is not applicable to vour computet
文章浏览阅读1k次。http://www.adobe.com/products/flashplayer.html这里有关于flash player 11 的一些视频介绍。有兴趣的人可以看看。最近flash player 11.2 正式版已经放出来了,支持stage3d 和兼容老显卡。http://get.adobe.com/cn/flashplayer/_flash player 11
文章浏览阅读3.4k次。随着计算机的普及以及对电子游戏的认识, 电子游戏已被越来越多的人选作放松、 娱乐的休闲方式; 电子游戏既不需要专门购买游戏器材, 也不需要宽阔的游戏场地, 只需要一台能独立完成任务的计算机即可, 它可以是人们工作、 学习时用的计算机, 并不需要另行配置,这比起传统休闲游戏即省钱又省事。 局域网游戏更是可以将现实空间中零散的计算机,组织起来, 使其在逻辑空间中集中起来, 使游戏的组织、 开展变得轻松。 。关键词: 坦克大战; 游戏; myEclipse目录一、 系统分析 21.1可行性分析 21.1_基于java的战地大战游戏设计与实现答辩
文章浏览阅读1.3k次。Android 实现QQ第三方登录Android 实现QQ第三方登录首先肯定是去下载SDK和DEMOhttp://wiki.open.qq.com/wiki/mobile/SDK下载本文是我自己整合后的简单DEMO。先看下效果图吧原理:我们要使用QQ登录我们的应用,不是不用注册,是我们在后台为用户注册了,但是用户不知道,注_安卓代码怎么实现qq登录页面
文章浏览阅读789次。一、basedao + druid数据库连接池c3p0druid:魔鬼,号称最好的java 连接池为什么要用数据连接池?1.避免重复创建链接,链接创建不关闭情况 数据库链接非常宝贵/资源有限2.可以提高查选效率(以前频繁创建链接)3.便于对链接的同一管理和监控,便于优化应用线程池和数据库连接池统称为 池化技术1、创建servelt工程commons-beanutils-1.8.3.jar 将map 转化为对象工具类commons-dbutils-1.7.jar qu_apache druid 分页