Socket编程协议错误代码解析
10004—WSAEINTR
函数调用中断。该错误表明由于对WSACancelBlockingCall的调用,造成了一次调用被强行中断。
10009—WSAEBADF
文件句柄错误。该错误表明提供的文件句柄无效。在MicrosoftWindowsCE下,socket函数可能返回这个错误,表明共享串口处于“忙”状态。
10013—WSAEACCES
权限被拒。尝试对套接字进行操作,但被禁止。若试图在sendto或WSASendTo中使用一个广播地址,但是尚未用setsockopt和SO_BROADCAST这两个选项设置广播权限,便会产生这类错误。
10014—WSAEFAULT
地址无效。传给Winsock函数的指针地址无效。若指定的缓冲区太小,也会产生这个错误。10022—WSAEINV AL
参数无效。指定了一个无效参数。例如,假如为WSAIoctl调用指定了一个无效控制代码,便会产生这个错误。另外,它也可能表明套接字当前的状态有错,例如在一个目前没有监听的套接字上调用accept或WSAAccept。
10024—WSAEMFILE
打开文件过多。提示打开的套接字太多了。通常,Microsoft提供者只受到系统内可用资源数量的限制。
10035—WSAEWOULDBLOCK
资源暂时不可用。对非锁定套接字来说,如果请求操作不能立即执行的话,通常会返回这个错误。比如说,在一个非暂停套接字上调用connect,就会返回这个错误。因为连接请求不能立即执行。
10036—WSAEINPROGRESS
操作正在进行中。当前正在执行非锁定操作。一般来说不会出现这个错误,除非正在开发16位Winsock应用程序。
10037—WSAEALREADY
操作已完成。一般来说,在非锁定套接字上尝试已处于进程中的操作时,会产生这个错误。比如,在一个已处于连接进程的非锁定套接字上,再一次调用connect或WSAConnect。另外,服务提供者处于执行回调函数(针对支持回调例程的Winsock函数)的进程中时,也会出现这个错误。
10038—WSAENOTSOCK
无效套接字上的套接字操作。任何一个把SOCKET句柄当作参数的Winsock函数都会返回这个错误。它表明提供的套接字句柄无效。
10039—WSAEDESTADDRREQ
需要目标地址。这个错误表明没有提供具体地址。比方说,假如在调用sendto时,将目标地址设为INADDR_ANY(任意地址),便会返回这个错误。
10040—WSAEMSGSIZE
消息过长。这个错误的含义很多。如果在一个数据报套接字上发送一条消息,这条消息对内部缓冲区而言太大的话,就会产生这个错误。再比如,由于网络本身的限制,使一条消息过长,也会产生这个错误。最后,如果收到数据报之后,缓冲区太小,不能接收消息时,也会产生这个错误。
10041—WSAEPROTOTYPE
套接字协议类型有误。在socket或WSASocket调用中指定的协议不支持指定的套接字类型。
比如,要求建立SOCK_STREAM类型的一个IP套接字,同时指定协议为IPPROTO_UDP,便会产生这样的错误。
10042—WSAENOPROTOOPT
协议选项错误。表明在getsockopt或setsockopt调用中,指定的套接字选项或级别不明、未获支持或者无效。
10043——WSAEPROTONOSUPPORT
不支持的协议。系统中没有安装请求的协议或没有相应的实施方案。比如,如果系统中没有安装TCP/IP,而试着建立TCP或UDP套接字时,就会产生这个错误。10044—WSAESOCKTNOSUPPORT
不支持的套接字类型。对指定的地址家族来说,没有相应的具体套接字类型支持。比如,在向一个不支持原始套接字的协议请求建立一个SOCK_RAW套接字类型时,就会产生这个错误。
10045—WSAEOPNOTSUPP
不支持的操作。表明针对指定的对象,试图采取的操作未获支持。通常,如果试着在一个不支持调用Winsock函数的套接字上调用了Winsock时,就会产生这个错误。比如,在一个数据报套接字上调用accept或WSAAccept函数时,就会产生这样的错误。10046—WSAEPFNOSUPPORT
不支持的协议家族。请求的协议家族不存在,或系统内尚未安装。多数情况下,这个错误可与WSAEAFNOSUPPORT互换(两者等价);后者出现得更为频繁。10047—WSAEAFNOSUPPORT
地址家族不支持请求的操作。对套接字类型不支持的操作来说,在试着执行它时,就会出现这个错误。比如,在类型为SOCK_STREAM的一个套接字上调用sendto或WSASendTo函数时,就会产生这个错误。另外,在调用socket或WSASocket函数的时候,若同时请求了一个无效的地址家族、套接字类型及协议组合,也会产生这个错误。10048—WSAEADDRINUSE
地址正在使用。正常情况下,每个套接字只允许使用一个套接字地址(例如,一个IP套接字地址由本地IP地址及端口号组成)。这个错误一般和bind、connect和WSAConnect这三个函数有关。可在setsockopt函数中设置套接字选项SO_REUSEADDR,允许多个套接字访问同一个本地IP地址及端口号(详情见第9章)。
10049—WSAEADDRNOTA V AIL
不能分配请求的地址。API调用中指定的地址对那个函数来说无效时,就会产生这样的错误。例如,若在bind调用中指定一个IP地址,但却没有对应的本地IP接口,便会产生这样的错误。另外,通过connect、WSAConnect、sendto、WSASendTo和WSAJoinLeaf这四个函数为准备连接的远程计算机指定端口0时,也会产生这样的错误。10050—WSAENETDOWN
网络断开。试图采取一项操作时,却发现网络连接中断。这可能是由于网络堆栈的错误,网络接口的故障,或者本地网络的问题造成的。
10051—WSAENETUNREACH
网络不可抵达。试图采取一项操作时,却发现目标网络不可抵达(不可访问)。这意味着本地主机不知道如何抵达一个远程主机。换言之,目前没有已知的路由可抵达那个目标主机。10052—WSAENETRESET
网络重设时断开了连接。由于“保持活动”操作检测到一个错误,造成网络连接的中断。若在一个已经无效的连接之上,通过setsockopt函数设置SO_KEEPALIVE选项,也会出现这样的错误。
10053—WSAECONNABORTED
软件造成连接取消。由于软件错误,造成一个已经建立的连接被取消。典型情况下,这意味着连接是由于协议或超时错误而被取消的。
10054—WSAECONNRESET
连接被对方重设。一个已经建立的连接被远程主机强行关闭。若远程主机上的进程异常中止运行(由于内存冲突或硬件故障),或者针对套接字执行了一次强行关闭,便会产生这样的错误。针对强行关闭的情况,可用SO_LINGER套接字选项和setsockopt来配置一个套接字(欲知详情,请参阅第9章)。
10055—WSAENOBUFS
没有缓冲区空间。由于系统缺少足够的缓冲区空间,请求的操作不能执行。10056—WSAEISCONN
套接字已经连接。表明在一个已建立连接的套接字上,试图再建立一个连接。要注意的是,数据报和数据流套接字均有可能出现这样的错误。使用数据报套接字时,假如事先已通过connect或WSAConnect调用,为数据报通信关联了一个端点的地址,那么以后试图再次调用sendto或WSASendTo,便会产生这样的错误。
10057—WSAENOTCONN
套接字尚未连接。若在一个尚未建立连接的“面向连接”套接字上发出数据收发请求,便会产生这样的错误。
10058—WSAESHUTDOWN
套接字关闭后不能发送。表明已通过对shutdown的一次调用,部分关闭了套接字,但事后又请求进行数据的收发操作。要注意的是,这种错误只会在已经关闭的那个数据流动方向上才会发生。举个例子来说,完成数据发送后,若调用shutdown,那么以后任何数据发送调用都会产生这样的错误。
10060—WSAETIMEDOUT
连接超时。若发出了一个连接请求,但经过规定的时间,远程计算机仍未作出正确的响应(或根本没有任何响应),便会发生这样的错误。要想收到这样的错误,通常需要先在套接字上设置好SO_SNDTIMEO和SO_RCVTIMEO选项,然后调用connect及WSAConnect函数。要想了解在套接字上设置SO_SNDTIMEO和SO_RCVTIMEO选项的详情,可参考第9章。10061—WSAECONNREFUSED
连接被拒。由于被目标机器拒绝,连接无法建立。这通常是由于在远程机器上,没有任何应用程序可在那个地址之上,为连接提供服务。
10064—WSAEHOSTDOWN
主机关闭。这个错误指出由于目标主机关闭,造成操作失败。然而,应用程序此时更有可能收到的是一条WSAETIMEDOUT(连接超时)错误,因为对方关机的情况通常是在试图建立一个连接的时候发生的。
10065—WSAEHOSTUNREACH
没有到主机的路由。应用程序试图访问一个不可抵达的主机。该错误类似于WSAENETUNREACH。
10067—WSAEPROCLIM
进程过多。有些Winsock服务提供者对能够同时访问它们的进程数量进行了限制。10091—WSASYSNOTREADY
网络子系统不可用。调用WSAStartup时,若提供者不能正常工作(由于提供服务的基层系统不可用),便会返回这种错误。
10092—WSA VERNOTSUPPORTED
Winsock.dll版本有误。表明不支持请求的Winsock提供者版本。10093—WSANOTINITIALISED
Winsock尚未初始化。尚未成功完成对WSAStartup的一次调用。10101—WSAEDISCON
正在从容关闭。这个错误是由WSARecv和WSARecvFrom返回的,指出远程主机已初始化了一次从容关闭操作。该错误是在像A TM这样的“面向消息”协议上发生的。10102—WSAENOMORE
找不到更多的记录。这个错误自WSALookupServiceNext函数返回,指出已经没有留下更多的记录。这个错误通常可与WSA_E_NO_MORE互换使用。在应用程序中,应同时检查这个错误以及WSA_E_NO_MORE。
10103—WSAECANCELLED
操作被取消。这个错误指出当WSALookupServiceNext调用仍在处理期间,发出了对WSALookupServiceEnd(服务中止)的一个调用。此时,WSALookupServiceNext便会返回这个错误。这个错误代码可与WSA_E_CANCELLED互换使用。作为应用程序,应同时检查这个错误以及WSA_E_CANCELLED。
10104—WSAEINV ALIDPROCTABLE
进程调用表无效。该错误通常是在进程表包含了无效条目的情况下,由一个服务提供者返回的。欲知服务提供者的详情,可参考第14章。
10105—WSAEINV ALIDPROVIDER
无效的服务提供者。这个错误同服务提供者关联在一起,在提供者不能建立正确的Winsock 版本,从而无法正常工作的前提下产生。
10106—WSAEPROVIDERFAILEDINIT
提供者初始化失败。这个错误同服务提供者关联在一起,通常见于提供者不能载入需要的DLL时。
10107—WSASYSCALLFAILURE
系统调用失败。表明绝对不应失败的一个系统调用却令人遗憾地失败了。10108—WSASERVICE_NOT_FOUND
找不到这样的服务。这个错误通常与注册和名字解析函数相关,在查询服务时产生(第10章对这些函数进行了详尽解释)。该错误表明,在给定的名字空间内,找不到请求的服务。10109—WSATYPE_NOT_FOUND
找不到类的类型。该错误也与注册及名字解析函数关联在一起,在处理服务类(ServiceClass)时发生。若注册好一个服务的实例,它必须引用一个以前通过WSAInstallServiceClass
安装好的服务。
10110—WSA_E_NO_MORE
找不到更多的记录。这个错误是自WSALookupServiceNext调用返回的,指出已经没有剩下的记录。该错误通常可与WSAENOMORE互换使用。作为一个应用程序,应同时检查这个错误以及WSAENOMORE。
10111—WSA_E_CANCELLED
操作被取消。该错误指出在对WSALookupServiceNext的调用尚未完成的时候,又发出了对WSALookupServiceEnd(中止服务)的一个调用。这样,WSALookupServiceNext就会返回该错误。这个错误代码可与WSAECANCELLED互换使用。作为一个应用程序,应同时检查这个错误以及WSAECANCELLED。
10112—WSAEREFUSED
查询被拒。由于被主动拒绝,所以一个数据库查询操作失败。
11001—WSAHOST_NOT_FOUND
主机没有找到。这个错误是在调用gethostbyname和gethostbyaddr时产生的,表明没有找到一个授权应答主机(AuthoritativeAnswerHost)。
11002—WSATRY_AGAIN
非授权主机没有找到。这个错误也是在调用gethostbyname和gethostbyaddr时产生的,表明没有找到一个非授权主机,或者遇到了服务器故障。
11003—WSANO_RECOVERY
遇到一个不可恢复的错误。这个错误也是在调用gethostbyname和gethostbyaddr时产生的,指出遇到一个不可恢复的错误,应再次尝试操作。
11004—WSANO_DATA
没有找到请求类型的数据记录。这个错误也是在调用gethostbyname和gethostbyaddr时产生的,指出尽管提供的名字有效,但却没有找到与请求类型对应的数据记录。11005—WSA_QOS_RECEIVERS
至少有一条预约消息抵达。这个值同IP服务质量(QoS)有着密切的关系,其实并不是一个真正的“错误”(QoS的详情见第12章)。它指出网络上至少有一个进程希望接收QoS通信。
11006—WSA_QOS_SENDERS
至少有一条路径消息抵达。这个值同QoS关联在一起,其实更像一种状态报告消息。它指出在网络上,至少有一个进程希望进行QoS数据的发送。
11007—WSA_QOS_NO_SENDERS
没有QoS发送者。这个值同QoS关联在一起,指出不再有任何进程对QoS数据的发送有兴趣。请参阅第12章,了解在发生这样的错误时,对所发生情况的一系列完整说明。11008—WSA_QOS_NO_RECEIVERS
没有QoS接收者。这个值同QoS关联在一起,指出不再有任何进程对QoS数据的接收有兴趣。请参阅第12章,查阅对这个错误的完整说明。
11009—WSA_QOS_REQUEST_CONFIRMED
预约请求已被确认。QoS应用可事先发出请求,希望在批准了自己对网络带宽的预约请求后,收到通知。若发出了这样的请求,一旦批准,便会收到这样的消息。请参阅第12章,了解对此消息的详细说明。
11010—WSA_QOS_ADMISSION_FAILURE
缺乏资源致错。资源不够,以至于无法满足QoS带宽请求。
11011—WSA_QOS_POLICY_FAILURE
证书无效。表明发出QoS预约请求的时候,要么用户并不具备正确的权限,要么提供的证书无效。
11012—WSA_QOS_BAD_STYLE
未知或冲突的样式。QoS应用程序可针对一个指定的会话,建立不同的过滤器样式。若出现这一错误,表明指定的样式类型要么未知,要么存在冲突。请参阅第12章,了解对过滤器样式的详细说明。
11013—WSA_QOS_BAD_OBJECT
无效的FILTERSPEC结构或者提供者特有对象。假如为QoS对象提供的FILTERSPEC结构无效,或者提供者特有的缓冲区无效,便会返回这样的错误,详见第12章。11014—WSA_QOS_TRAFFIC_CTRL_ERROR
FLOWSPEC有问题。假如通信控制组件发现指定的FLOWSPEC参数存在问题(作为QoS 对象的一个成员传递),便会返回这样的错误。
11015—WSA_QOS_GENERIC_ERROR
常规QoS错误。这是一个比较泛泛的错误;假如其他QoS错误都不适合,便返回这个错误。6—WSA_INV ALID_HANDLE
指定的事件对象无效。若使用与Win32函数对应的Winsock函数,便有可能产生这样的Win32错误。它表明传递给WSAWaitForMultipleEvents的一个句柄是无效的。
8—WSA_NOT_ENOUGH_MEMORY
内存不够。这个Win32错误指出内存数量不足,无法完成指定的操作。
87—WSA_INVALID_PARAMETER
一个或多个参数无效。这个Win32错误表明传递到函数内部的参数无效。假若事件计数参数无效,那么在执行WSAWaitForMultipleEvents的时候,也会发生这样的错误。258—WSA_W AIT_TIMEOUT
操作超时。这个Win32错误指出重叠I/O操作未在规定的时间内完成。
995—WSA_OPERATION_ABORTED
重叠操作被取消。这个Win32错误指出由于套接字的关闭,造成一次重叠I/O操作的取消。除此以外,该错误也可能在执行SIO_FLUSH这个I/O控制命令时出现。
996—WSA_IO_INCOMPLETE
重叠I/O事件对象未处于传信状态。这个Win32错误也和重叠I/O操作密切相关,在调用WSAGetOverlappedResults函数的时候产生,指出重叠I/O操作尚未完成。
997—WSA_IO_PENDING
重叠操作将在以后完成。用Winsock函数发出一次重叠I/O操作时,若出现这样的Win32错误,便表明操作尚未完成,而且会在以后的某个时间完成。
WebSocket协议的握手和数据帧
WebSocket协议的握手和数据帧 WebSocket是定义服务器和客户端如何通过Web通信的一种网络协议。协议是通信的议定规则。组成互联网的协议组由IETF(互联网工程任务组)发布。IETF发布评议请求(Request for Comments,RFC),精确地规定了协议(包括RFC 6455):WebSocket协议。RFC 6455于2011年12月发布,包含了实现WebSocket客户端和服务器时必须遵循的规则。 websocket基本上是一个很简单的协议, 主要流程非常少, 实现起来也很简单。 为简单起见, 下面只分析握手和数据帧的报文. 一. 握手(handshake). 握手协议由客户端发起, 服务器响应, 一来一回就完成了. 基本上是为了兼容现有的http 基础设施. 下面是一个客户端发起的握手请求: 47 45 54 20 2F 20 48 54 54 50 2F 31 2E 31 0D 0A GET./.HTTP/1.1.. 55 70 67 72 61 64 65 3A 20 77 65 62 73 6F 63 6B Upgrade:.websock 65 74 0D 0A 43 6F 6E 6E 65 63 74 69 6F 6E 3A 20 et..Connection:. 55 70 67 72 61 64 65 0D 0A 48 6F 73 74 3A 20 31 Upgrade..Host:.1 39 32 2E 31 36 38 2E 38 2E 31 32 38 3A 31 33 30 92.168.8.128:130 30 0D 0A 4F 72 69 67 69 6E 3A 20 6E 75 6C 6C 0D 0..Origin:.null. 0A 50 72 61 67 6D 61 3A 20 6E 6F 2D 63 61 63 68 .Pragma:.no-cach 65 0D 0A 43 61 63 68 65 2D 43 6F 6E 74 72 6F 6C e..Cache-Control 3A 20 6E 6F 2D 63 61 63 68 65 0D 0A 53 65 63 2D :.no-cache..Sec- 57 65 62 53 6F 63 6B 65 74 2D 4B 65 79 3A 20 64 WebSocket-Key:.d 33 35 39 46 64 6F 36 6F 6D 79 71 66 78 79 59 46 359Fdo6omyqfxyYF 37 59 61 63 77 3D 3D 0D 0A 53 65 63 2D 57 65 62 7Yacw==..Sec-Web 53 6F 63 6B 65 74 2D 56 65 72 73 69 6F 6E 3A 20 Socket-Version:. 31 33 0D 0A 53 65 63 2D 57 65 62 53 6F 63 6B 65 13..Sec-WebSocke 74 2D 45 78 74 65 6E 73 69 6F 6E 73 3A 20 78 2D t-Extensions:.x- 77 65 62 6B 69 74 2D 64 65 66 6C 61 74 65 2D 66 webkit-deflate-f 72 61 6D 65 0D 0A 55 73 65 72 2D 41 67 65 6E 74 https://www.360docs.net/doc/2118862122.html,er-Agent 3A 20 4D 6F 7A 69 6C 6C 61 2F 35 2E 30 20 28 57 :.Mozilla/5.0.(W 69 6E 64 6F 77 73 20 4E 54 20 36 2E 31 3B 20 57 indows.NT.6.1;.W 4F 57 36 34 29 20 41 70 70 6C 65 57 65 62 4B 69 OW64).AppleWebKi 74 2F 35 33 37 2E 33 36 20 28 4B 48 54 4D 4C 2C t/537.36.(KHTML, 20 6C 69 6B 65 20 47 65 63 6B 6F 29 20 43 68 72 .like.Gecko).Chr 6F 6D 65 2F 33 32 2E 30 2E 31 36 35 33 2E 30 20 ome/32.0.1653.0. 53 61 66 61 72 69 2F 35 33 37 2E 33 36 0D 0A 0D Safari/537.36... 0A
modbus_通讯协议_实例
上海安标电子有限公司 ——PC39A接地电阻仪通信协议 通信协议: 波特率:9600数据位:8校验位:无停止位:1 上位机(计算机): 字节号 1 2 3 4 5 6 7 8 意义ID Command 数据地址V alue CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,读:3或4,写:6 3 数据地址:2个字节,寄存器地址,读从100开始,写从200开始 4 V alue:2个字节,读:个数(以整型为单位),写:命令/ 数据(以整型为单位) 5 CRC:计算出CRC 下位机(PC39A): 读数据,若正确 字节号 1 2 3 3+N (N=个数*2) 3+N+1 3+N+2 意义ID Command=3 / 4 数据个数数据CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,收到的上位机命令 3数据个数:1个字节,返回数据个数(以字节为单位) 4 V alue:N个字节,是返回上位机的数据 5 CRC:计算出CRC 写命令,若正确 返回收到的数据: 若错误 字节号 1 2 3 4 5 意义ID Command 数据CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,收到的上位机命令或上0x80, 如收到3,返回0x83 3数据:1个字节,错误的指令 错误指令 1:表示command不存在 2:表示数据地址超限 4 CRC:计算出CRC
例如读PC39A 电流数据: 机器地址为12,电流的数据地址100,数据为15.45(A) (一个整型数据) 主机: ID Command 数据地址 V alue CRC 16进制 0x0c 0x03 0x0064 0x0001 CRC_H CRC_L 10进制 12 3 100 1 CRC_H CRC_L 从机返回 如正确: ID Command 数据个数(以字节为单位) V alue CRC 16进制 0x0c 0x03 0x002 0x0609 CRC_H CRC_L 10进制 12 3 2 1545 CRC_H CRC_L 如错误: ID Command 数据 CRC 16进制 0x0c 0x83 0x02 CRC_H CRC_L 10进制 12 131 2 CRC_H CRC_L 例如发PC39A 启动命令: 机器地址为12,命令的地址200,数据为25000(25000表示启动) 主机: ID Command 数据地址 V alue CRC 16进制 0x0c 0x06 0x00c8 0x61a8 CRC_H CRC_L 10进制 12 6 200 25000 CRC_H CRC_L 从机返回 如正确: ID Command 数据地址 V alue CRC 16进制 0x0c 0x06 0x00c8 0x61a8 CRC_H CRC_L 10进制 12 6 200 25000 CRC_H CRC_L 如错误: ID Command 数据 CRC 16进制 0x0c 0x86 0x02 CRC_H CRC_L 10进制 12 134 2 CRC_H CRC_L 0011 10000110 错误码0x83 功能码0x06错误码0x86
Socket通信协议
一.登录 指令:SocketCommand.LoginCommand.Login 参数:用户名+“|”+密码 二.登录成功 指令:SocketCommand.LoginCommand.LoginOk 参数:服务器下当前账号所拥有的的摄像头数量+“|”+上次登录时间+“|”+上次登录IP 说明:登录成功会同时返回服务器上该账号下摄像头的数量,请与本地摄像头数量进行比对,然后再发起上传或者下载的指令 三.登录失败 指令:SocketCommand.LoginCommand.LoginError 参数:登录失败原因,一般为“用户名或者密码错误!” 说明:收到此指令,可直接用弹出窗口显示参数内容提醒用户,用户重新输入用户名密码后再重新发起登录指令 四.创建数据连接 指令:SocketCommand.NormalCommand.CreatDataSocket 参数:用户名+“|”+密码 说明:申请创建数据传输专用连接,主要是为了在高峰期或者数据量大的情况下同步摄像头数据而不会影响到主端口通讯 五.返回数据端口 指令:SocketCommand.NormalCommand. ReturnDataSocketPort 参数:数据传输端口 说明:服务端针对CreatDataSocket指令所返回的结果,当服务端目前没有可用端口的时候参数会返回空值,请注意判断,如果参数不为空,可针对此端口发起socket短 连接,此连接不需要保持心跳包,不需要验证身份 六.上传摄像头 指令:SocketCommand.CaramCommand.UploadCaramer 参数:摄像头ID+“|”+摄像头密码+“|”+当前数量+“|”+总数量 说明:登录成功后如果判断到本地的摄像头数量大于服务器上的摄像头数量,就可以立即发起创建数据连接指令,然后根据返回的端口成功创建数据连接之后,就可以 发起该指令了,一次只上传一个摄像头,第三个参数默认从1开始 七.上传摄像头成功 指令:SocketCommand.CaramCommand. UploadSucess 参数:摄像头ID+“|”+摄像头在线状态+“|”+已同步数量+“|”+总数量 说明:当已同步数量等于总数量的时候,就可以关闭连接了,关闭连接不需要通知服务端 八.上传摄像头失败 指令:SocketCommand.CaramCommand. UploadFail 参数:摄像头ID+“|”+失败原因+“|”+已同步数量+“|”+总数量 说明:失败原因有以下几个值:(1)ID和密码不匹配(2)该摄像头绑定账号已满九.下载摄像头 指令:SocketCommand.CaramCommand.DownLoadCaramer 参数:已下载的摄像头数量 说明:同上传摄像头的说明
WebSocket协议中文版
Internet Engineering Task Force (IETF) I. Fette Request for Comments: 6455 Google, Inc. Category: Standards Track A. Melnikov ISSN: 2070-1721 Isode Ltd. December 2011 张开涛[译] WebSocket协议
摘要 WebSocket协议实现在受控环境中运行不受信任代码的一个客户端到一个从该代码已经选择加入通信的远程主机之间的全双工通信。用于这个的安全模型是通常由web浏览器使用的基于来源的安全模型。该协议包括一个打开阶段握手、接着是基本消息帧、TCP之上的分层(layered over TCP)。该技术的目标是为需要与服务器全双工通信且不需要依赖打开多个HTTP连接(例如,使用XMLHttpRequest或
简单的CSOCKET编程基于TCPIP协议
简单的C++ SOCKET编程---基于TCP/IP协议 分别建两个工程。。把cpp拷贝进去运行就可以了。。。 server端: #include
无线通信协议设计.doc
关键字:网络协议,成本低,外围电路少,传感器。 第一阶段 传感器网络的三要素是传感器,观察者和感知对象。传感器由电源,感知部件,嵌入式处理器,存储器,通信部件和软件这几部分构成。 无线传感器网络通常包括传感器节点,汇聚节点和管理节点。大量传感器节点随机部署在监测区域内部或附近,这一过程可以通过飞行器撒播,人工埋置和火箭弹射等方式完成。撒放后的传感器节点进入到自检启动的唤醒状态,在簇首节点的引领下,建立起路由拓扑,之后传感器节点采集并记录周围感兴趣的环境信息,沿着之前建立好的路由拓扑路径逐跳进行传输,在传输过程中数据可能被多个节点处理,经过单跳或者路由多跳后传输到汇聚节点,汇聚节点通过串口将数据传送到网关节点进行集中处理。在本课题中网关节点用PC充当,网关节点再连接到基于IPv6的cernet2主干网上,监控中心从cernet2上获取数据,并完成对数据的融合,展示,预测,以及决策,从而对整个网络进行协调和控制。 无线传感器网络具有以下特点: (1)网络规模大。 (2)网络的自组织能力(要求传感器节点具有自组织的能力,并且能够自动进行配置和管理,通过拓扑控制机制和网络协议自动形成转发监测数据的多跳无线网络系统) (3)无线传感器网络节点的通信能力有限(无线传感器网络中传感器节点的传输率低,一般只有200kbps左右,通信距离短) (4)无线传感器网络节点的电源能量有限 (5)无线传感器网络存储和计算能力有限(无线传感器网络中的传感器节点是一种微型嵌入式设备)(6)无线传感器网络以数据为中心 一个基于ZigBee技术的无线传感器网络平台 研究了无线传感器网络中控制信息及传感器数据的获取,描述,解析,存储和传输。 采用了新兴的ZigBee技术,为解决WSNs中的核心问题—能量限制建立了基础。 设计和实现了低成本的两层板的工作频率为2.4GHZ的无线数据传输模块。 (4)建立了一个分知式的远程无线监测及控制的平台。在该平台上实现了 ZigBee协议,组建了一个具有路由节点的无线网络。为进~步的无线传感器的 实际应用打下了基础。 立意的意义 目前,无线传感器终端的希望和要求主要集中在尽量节省的系统能量消耗、 尽量节省的信息处理以及简易的信号收发。对于无线传感器网络中的网络协议 的期待是:用简洁的协议栈支持传感器网络的有效运行,到处存在接入可能; 利用广播信息,避免交互应答:简化的协议层次、简练的信令方式;节省的系 开销等。正是基于无线传感器网络终端的要求,ZigBee协议应运而生。ZigBee 协议是专用于无线传感器网络的通信协议,能最大可能的节省网络中能量,可 随时接入大量节点,高容错性,强鲁棒性,逐渐成为了无线传感器网络的首选 络协议。 到目前为止无线传感器网络的发展己经经历了三个阶段{25]: (1) 点对点。只是简单取代了有线网络,各个设备之间只是直接联系, 只有有限通信能力。 (2) 点对多点。传感器网络中有一个路由和控制的中央节点,所有数据 流动必须通过基站。 (3) 多跳/网状结构。完全的RF冗余,具有多数据通道,自我建构,自 我调整,智能分布式。 ZigBee是一种专门为低速率传感器网络而设计的低成本、低功耗的短距离
win socket协议
LR的socket协议 [翻译]LoadRunner与Winsock协议(一) 在开始讨论winsocket解决方案之前,我们先讨论一下各种协议是如何工作.从前面的简介可以了解到很多的高级协议,例如FTP,HTTP协议等. 以及所有基于window的应用(例如IE,WS-FTP)底层都是在Winsocket层上通信,因此任何高级协议的底层都是用Winsocket通信。什么时候在LR中选择Winsocket协议呢?你要先了解LR是怎么样工作的:LR捕捉API请求然后再把它们回放。所以当你在创建LR WEB脚本的时候,VUGEN捕捉从IE出去的所有的HTTP请求。除此之外lr还支持其他很多协议,例如Oracle,ODBC等。在选择不同协议录制脚本的时候,LR是依靠hooks捕捉正确的API请求。所以既然大部分网络协议都是架构在winsocket协议之上的,那对于lr不支持的协议,我们都可以在winsocket层上录制脚本。所以当找不到合适协议的时候,可以选择winsocket 来录制。录制WinSock协议脚本!Lr录制新的虚拟用户脚本,选择winsock协议在web虚拟用户脚本中录制的是URL信息,所以VUGEN启动流览器并运行就可以了,但选择Winsocket录制的时候,可能会是各种形式的应用,并不简简单单就是浏览器,所以在开始的时候我们不需要指定应用的地址。下面的例子我们选择winsock来录制web应用,正如上面说的我们开始要指定ie的地址。因为本来lr是支持http协议的,所以这个例子并无具体的意义,只是为了使例子简单。 [翻译]LoadRunner与Winsock协议(二) winsock脚本典型代码? lrs_create_socket(”socket0″, “UDP”, “LocalHost=0″, “RemoteHost=doors:2084″, LrsLastArg); lrs_create_socket(”socket1″, “TCP”, “LocalHost=0″, “RemoteHost=https://www.360docs.net/doc/2118862122.html,:80″, LrsLastArg); lrs_send(”socket0″, “buf0″, LrsLastArg); lrs_receive(”socket0″, “buf1″, LrsLastArg); lrs_send(”socket1″, “buf2″, LrsLastArg); lrs_send(”socket0″, “buf3″, LrsLastArg); lrs_receive(”socket0″, “buf4″, LrsLastArg); 这是访问雅虎的一个应用,正如我们看到的,winsock先打开一个winsocket连接,然后收发包。我们发现录制的脚本中比web脚本(三个文件)多一个文件。
游戏通信协议设计文档
游戏通信协议设计 1、概述 游戏通信协议包含两种不同的部分:客户端和服务器(C-S)之间的交互协议,游戏内部服务器(S-S)之间的交互协议。前者为了降低延迟,应该尽可能减少报文长度。同时,为了防止外挂,必须作加密处理。相反,后者在服务器之间,通信协议就可以比较灵活。 客户端和服务器的通信经过服务器的网关,经过中转分发到其他类型的服务器上或者分发给客户端。 2、客户端和服务器通信协议 协议采用分层原理,固定长度的报头把字节流分割成报文,除了基本的报文类型,应用相关的报文内容由应用自身决定,比如:对AS写的客户端用AMF编码报文内容。协议自动对报文内容做加密和解密。 Struct header { uint32_t MsgLen; //信息包的长度,不包括固定长度的Header uint16_t MsgSeq; // 该消息的序列号 uint8_t MsgType; //信息的类型 uint8_t MsgVersion; //信息的版本号,当前为0x1 uint16_t MsgCheck; //信息的校验码 uint8_t body[0]; //信息包的内容 }; 校验码的计算:MsgCheck = (uint16_t)( MsgLen+ MsgType+ MsgSeq + MsgVersion ) 网关与客户端传递的消息还需要经过xxtea的加密才可以。 序列号在连接认证的时候是0,以后递增;网关返回给客户端认证成功,序号也是从0开始。如果以后的报文序号发生错误,应该断开连接,让客户端执行重新连接。
网关根据命令类型,分解报文后,把内容转发到相应的服务器。有些报文类型对网关是透明的,网关不需要做特殊处理。有些类型的报文,网关必须知道报文内容的格式,在网关做特殊处理,主要是关系到用户(地图)位置变动的命令,比如: 1、用户连接认证。确认用户登录所在的网关。 2、用户更换房间。 3、用户更换桌子。 3、内部服务器通信 可以用多个key/Value的方式编码,比如:从客户端传过来的报文应该作为一个key/value,网关可以附加上该报文另外的信息:uid(哪个用户),用户所在位置(gateway_id,内部桌子号)。
WebSocket 协议(RFC6455)中文翻译版(word版)
WebSocket 协议(RFC6455)中文翻译版(word版) 翻译自:https://www.360docs.net/doc/2118862122.html,/rfc/rfc6455.txt Internet Engineering Task Force (IETF) I. Fette Request for Comments: 6455 Google, Inc. Category: Standards Track A. Melnikov ISSN: 2070-1721 Isode Ltd. December 2011 WebSocket 协议 摘要 WebSocket协议使在控制环境下运行不受信任代码的客户端和能够选择与那些代码通信的远程主机之间能够双向通信。用于这个的安全模型是以origin为基础的安全模型,一般被浏览器使用。协议包含打开握手,其次是基本消息框架,在 TCP 之上。这项技术的目的是为基于浏览器的、需要与服务器双向通信的应用程序提供一种不依赖于打开多个HTTP连接的机制(例如,使用XMLHttpRequest或
通信协议书应用举例
//信息头+ 控制卡地址+ 命令字+ 数据区长度+ 数据内容+ 校验码 说明: 1.信息头: 四个字节, 内容依次为: 0x51, 0x44, 0x45, 0x4C 2.控制卡地址: 单字节, 范围为1~255(0为广播地址) 3.命令字: 单字节 ?发送设置屏参的命令字为0xD1 ?发送设置扫描方式的命令字为0xD2 ?发送设置硬件参数的命令字为0xD3 ?发送回读硬件参数的命令字为0xD4 ?发送节目数据的命令字为0xD5 ?发送定时开关机的命令字为0xD6 ?发送校准时间的命令字为0xD7 ?发送显示屏当前节目内容回读的命令字为0xD8 ?发送调节显示屏亮度的命令字为0xD9 ?下位机回送接收状态的命令字为0xDD ⑴发送通信结束的命令字为0xFD 4.数据区长度: 双字节,表示本次发送的数据区长度,但是每次发送的信息内容的长度最大为512字,数据区长度未标明的其值为0 5.数据内容: 主要是上位机将要发给下位机的数据, 需要注意: 数据发送顺序必须严格按照数据协议的规则发送. 6.校验码: 双字节 “信息头+ 控制卡地址+ 命令字+ 信息内容长度+ 信息内容”中的所有数据的每个字依次异最终所得结果再与0x5555异或就是校验码
1. 网口通信采用以太网通信协议80 2.3 2. ARP和IP数据包格式 3. 传输协议采用UDP协议和ICMP协议 4. 网口通信数据区协议格式如下: //信息头+ 控制卡地址+ 命令字+ 数据区长度+ 数据内容+ 校验码 说明: (1) 信息头: 四个字节, 内容依次为: 0x51, 0x44, 0x45, 0x4C (2)控制卡地址: 单字节, 范围为1~255(0为广播地址) (3) 命令字: 单字节 ①发送设置屏参的命令字为0xD1 ②发送设置扫描方式的命令字为0xD2 ③发送设置硬件参数的命令字为0xD3 ④发送回读硬件参数的命令字为0xD4 ⑤发送节目数据的命令字为0xD5 ⑥发送定时开关机的命令字为0xD6 ⑦发送校准时间的命令字为0xD7 ⑧发送显示屏当前节目内容回读的命令字为0xD8 ⑨发送调节显示屏亮度的命令字为0xD9 ⑩下位机回送接收状态的命令字为0xDD ?发送通信结束的命令字为0xFD (4)数据区长度: 双字节,表示本次发送的数据区长度,但是每次发送的信息内容的长度最大为512字,数据区长度未标明的其值为0 (5)数据内容: 主要是上位机将要发给下位机的数据, 需要注意: 数据发送顺序必须严格按照数据协议的规则发送. (6)校验码:
Socket私有协议修改版
yat 数据交换协议 V1.0 201601114
1.说明 2.概述 客户端命令帧格式:
其中例外信息中错误码定义如下: 01H:命令码错 02H:数据校验错 03H:命令解析错 04H:命令执行出错 05H:用户未认证 采用ASCII码方式交互;命令首字符为“~”,命令尾字符为“`”。3.CRC Java实现代码: private static int polynomial = 0x1021; public static int crc(byte[] bytes){ int crc = 0xffff; for(int index = 0; index < bytes.length; index++){ byte b = bytes[index]; for(int i=0; i<8; i++){ boolean bit = (((b >> (7-i)) & 1) == 1); boolean c15 = (((crc >> 15) & 1) == 1); crc <<= 1; crc &= 0xffff; if(bit) crc += 1; if(c15) crc ^= polynomial; } } crc &= 0xffff; for(int i=0; i<16; i++){ boolean c15 = (((crc >> 15) & 1) == 1); crc <<= 1; crc &= 0xffff; if(c15)
crc ^= polynomial; } crc &= 0xffff; return crc; } 4.客户端命令 3.1命令 功能描述:Djfn187654376tyhgf65743219iuyhrf 1、注册功能 回复格式:
Socket私有协议修改版
数据交换协议 V1.0 201601114
1.说明 2.概述 客户端命令帧格式: 服务端命令帧格式:
其中例外信息中错误码定义如下: 01H:命令码错 02H:数据校验错 03H:命令解析错 04H:命令执行出错 05H:用户未认证 采用ASCII码方式交互;命令首字符为“~”,命令尾字符为“`”。 3.CRC Java实现代码: private static int polynomial = 0x1021; public static int crc(byte[] bytes){ int crc = 0xffff; for(int index = 0; index < bytes.length; index++){ byte b = bytes[index]; for(int i=0; i<8; i++){ boolean bit = (((b >> (7-i)) & 1) == 1); boolean c15 = (((crc >> 15) & 1) == 1); crc <<= 1; crc &= 0xffff; if(bit) crc += 1; if(c15) crc ^= polynomial; } } crc &= 0xffff; for(int i=0; i<16; i++){ boolean c15 = (((crc >> 15) & 1) == 1); crc <<= 1; crc &= 0xffff; if(c15) crc ^= polynomial;
crc &= 0xffff; return crc; } 4.客户端命令 3.1命令 功能描述:Djfn187654376tyhgf65743219iuyhrf 1、注册功能 命令格式: 2、启用操作
通讯协议设计
精选资料 通信接口协议 2011年6月 可修改编辑
修订控制页
目录 1.概述 (6) 1.1 编写目的 (6) 1.2 缩略语 (6) 1.3 参考资料 (6) 1.4 共享平台机具接口定义 (7) 1.5通信密钥 (8) 2 协议包格式 (8) 2.1 协议分层说明 (8) 2.2 包格式 (8) 2.3 校验字MAC码计算方法 (9) 3.接口报文格式 (11) 3.1 业务应用类 (11) 3.1.1消费流水上传 (11) 3.1.2身份识别流水上传 (13) 3.1.3黑名单下发 (14) 3.1.4身份识别白名单下发 (15) 3.1.5客户代码下发 (16) 3.2 设备管理类 (17)
3.2.1 通信参数下发 (17) 3.2.2 应用密钥下发 (19) 3.2.3时间同步下发 (20) 3.2.4心跳信号上传 (21) 3.2.5 开机密钥下发 (21) 3.3 门禁业务控制类 (23) 3.3.1下发节假日时段和星期节假日信息 (23) 3.3.2下发门设置信息(策略) (25) 3.3.3 启动/停止实时上传 (27) 3.3.4 远程强制控制门的开关 (28) 3.3.5 门禁锁状态查询 (29) 3.3.6 开门密码设置 (29) 3.3.7 多卡开门设置 (30) 3.3.8 协迫开门密码设置 (32) 3.4 考勤业务控制类 ............................................................... 错误!未定义书签。 3.4.1下发设设备工作模式.................................................................... 错误!未定义书签。 3.5 脱机消费业务控制类......................................................... 错误!未定义书签。 3.5.1下发补贴名单............................................................................... 错误!未定义书签。 3.5.2下发充值/存款名单 ...................................................................... 错误!未定义书签。 3.5.3下发消费类别参数 ....................................................................... 错误!未定义书签。 3.5.4下发消费策略............................................................................... 错误!未定义书签。 3.5.5 限制策略下发.............................................................................. 错误!未定义书签。
socket传输协议
竭诚为您提供优质文档/双击可除 socket传输协议 篇一:socket开发之通讯协议及处理 socket开发之通讯协议及处理 在socket应用开发中,还有一个话题是讨论的比较多的,那就是数据接收后如何处理的问题。这也是一个令刚接触socket开发的人很头疼的问题。 因为socket的tcp通讯中有一个“粘包”的现象,既:大多数时候发送端多次发送的小数据包会被连在一起被接 收端同时接收到,多个小包被组成一个大包被接收。有时候一个大数据包又会被拆成多个小数据包发送。这样就存在一个将数据包拆分和重新组合的问题。那么如何去处理这个问题呢?这就是我今天要讲的通讯协议。 所谓的协议就是通讯双方协商并制定好要传送的数据 的结构与格式。并按制定好的格式去组合与分析数据。从而使数据得以被准确的理解和处理。 那么我们如何去制定通讯协议呢?很简单,就是指定数据中各个字节所代表的意义。比如说:第一位代表封包头,第二位代表封类型,第三、四位代表封包的数据长度。然后
后面是实际的数据内容。 如下面这个例子: 前面三部分称之为封包头,它的长度是固定的, 第四部分是封包数据, 它的长度是不固定的,由第三部分标识其长度。因为我们的协议将用在tcp中,所以我没有加入校验位。原因是tcp 可以保证数据的完整性。校验位是没有必要存在的。 接下来我们要为这个数据封包声明一个类来封装它: 1publicclassmessage 2{ 3privatebyte_class; 4privatebyte_flag; 5privateint_size; 6privatebyte[]_content; 7 91011{get{return_content;}set{_content=value;}12}13 14publicintsize151617{get{return_size;}set{_size=va lue;}18} 19 20publicbyteFlag 21
《网络通信协议分析》课程设计开发实例
网络协议分析课程设计之协议编程 实验一帧封装 实验目的: ?编写程序,根据给出的原始数据,组装一个IEEE 802.3格式的帧(题目)默认的输入文件为二进制原始数据(文件名分别为input1和input2))。 ?要求程序为命令行程序。比如,可执行文件名为framer.exe,则命令行形式如下:framer inputfileoutputfile,其中,inputfile为原始数据文件,outputfile 为输出结果。 ?输出:对应input1和input2得结果分别为output1和output2。 试验要求: ?编写程序,根据给出的原始数据,组装一个IEEE 802.3格式的帧(题目)默认的输入文件为二进制原始数据(文件名分别为input1和input2))。 ?要求程序为命令行程序。比如,可执行文件名为framer.exe,则命令行形式如下:framer inputfileoutputfile,其中,inputfile为原始数据文件,outputfile 为输出结果。 输出:对应input1和input2得结果分别为output1和output2 验设计相关知识: 帧:来源于串行线路上的通信。其中,发送者在发送数据的前后各添加特殊的字符,使它们成为一个帧。Ethernet从某种程度上可以被看作是机器之间的数据链路层连接。 按802.3标准的帧结构如下表所示(802.3标准的Ethernet帧结构由7部 分组成) 802.3标准的帧结构
其中,帧数据字段的最小长度为46B 。如果帧的LLC 数据少于46B ,则应将数据字段填充至46B 。填充字符是任意的,不计入长度字段值中。 在校验字段中,使用的是CRC 校验。校验的范围包括目的地址字段、源地址字段、长度字段、LLC 数据字段。 循环冗余编码(CRC)是一种重要的线性分组码、编码和解码方法,具有简单、检错和纠错能力强等特点,在通信领域广泛地用于实现差错控制。CRC 校验码的检错能力很强,不仅能检查出离散错误,还能检查出突发错误。 利用CRC 进行检错的过程可简单描述如下:在发送端根据要传送的k 位二进制码序列,以一定的规则产生一个校验用的r 位监督码(CRC 码),附在原始信息的后边,构成一个新的二进制码序列(共k+r 位),然后发送出去。在接收端,根据信息码和CRC 码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则在差错控制理论中称为“生成多项式”。 循环冗余校验码的特点:(1)CRC 校验码可检测出所有单个错误。(2)CRC 校验码可检测出所有奇数位错误。(3)CRC 校验码可检测出所有双位的错误(4)CRC 校验码可检测出所有小于、等于校验位长度的突发错误。(5)CRC 校验码可以](1/2)-[11-k 的概率检测出长度为(K+1)位的突发错误 实验分析: ? 填充帧头部字段 要完成一次帧封装的过程,首先要完成的就是帧头部的装入,这一过程只要将签到吗、定界符、目的地址、源地址、长度字段的相应数值按顺序写入就可以了。其中,长度字段的值即为要发送的数据的实际长度。 ? 填充数据字段 在填充数据字段的过程中要注意的主要问题是数据字段的长度。802.3标准
通讯协议设计
通信接口协议2011年6月
修订控制页
目录 1.概述 (5) 1.1编写目的 (5) 1.2缩略语 (5) 1.3参考资料 (5) 1.4共享平台机具接口定义 (5) 1.5通信密钥 (6) 2协议包格式 (7) 2.1协议分层说明 (7) 2.2包格式 (7) 2.3校验字MAC码计算方法 (8) 3.接口报文格式 (9) 3.1业务应用类 (9) 3.1.1消费流水上传 (9) 3.1.2身份识别流水上传 (10) 3.1.3黑名单下发 (11) 3.1.4身份识别白名单下发 (12) 3.1.5客户代码下发 (13) 3.2设备管理类 (14) 3.2.1通信参数下发 (14) 3.2.2应用密钥下发 (14) 3.2.3时间同步下发 (15) 3.2.4心跳信号上传 (16) 3.2.5开机密钥下发 (16) 3.3门禁业务控制类 (18) 3.3.1下发节假日时段和星期节假日信息 (18) 3.3.2下发门设置信息(策略) (19) 3.3.3启动/停止实时上传 (20) 3.3.4远程强制控制门的开关 (21) 3.3.5门禁锁状态查询 (22) 3.3.6开门密码设置 (22) 3.3.7多卡开门设置 (23) 3.3.8协迫开门密码设置 (24) 3.4考勤业务控制类........................................ 错误!未定义书签。
3.5脱机消费业务控制类.................................... 错误!未定义书签。 3.5.1下发补贴名单 ................................................ 错误!未定义书签。
AS3991通讯协议实例
Building B of Nano Sensor Park, 200 Linghu Ave, Taihu International Science Technology Park, WuXi New District, WuXi, JiangSu, China Tel: X86-510-85387391 Email:sales@https://www.360docs.net/doc/2118862122.html, Commercial invoice Number: SD-110428 Date: April 28th, 2011 Bill To: Ship To: Rep: Ship via Jingfeng Liu UPS Quantity Item Unit Price Total 249 Breakout board bare PCB $0.05 $12.45 49 Breakout board bare PCB for Xbee module $0.05 $2.45 2 USB programmer $6.00 $12.00 10 GPS module $8.00 $80.00 10 Arduino Motor driver PCB $6.00 $60.00 2 ARM9 learning kit $12.00 $24.00 4 video interface board for ARM9 learning kit $4.00 $16.00 5 VGA interface board for ARM9 learning kit $6.00 $30.00 1 Finger print sensor $10.00 $10.00 10 STM32 cortex learning board $5.00 $50.00 1 GPS breakout PCB $4.00 $4.00 1 PCB header board $2.00 $2.00 Attn: Jingfeng Liu CuteDigi 1434 Cannon Mountain Dr Longmont, CO 80503 Tel #:720-949-4932 Attn: Jingfeng Liu CuteDigi 1434 Cannon Mountain Dr Longmont, CO 80503 Tel #:720-949-4932