基于Socket网络通信协议的应用研究(最终修改)

摘要 (2)

前言 (3)

1 Socket的定义和工作原理 (3)

2 支持Socket的操作系统 (3)

2.1 Linux环境中的Socket (3)

2.1.1 Linux的Socket的提出 (3)

2.1.2 Linux的Socket的工作方式 (4)

2.2 Windows NT系统环境中对Socket的支持 (5)

2.2.1 Winsock(Windows Socket)的提出 (5)

3.2.2 Winsock的原理 (5)

3.2.3 Winsock的通讯方式 (5)

3 Socket开发工具的讨论 (6)

3.1 C#中socket编程实现 (6)

3.2 Delphi中socket的操作方法 (6)

3.2.1 ServerSocket的属性设置 (6)

3.2.2 ClientSocket的属性 (6)

4 Socket在TCP与UDP协议集中的工作方式 (7)

4.1 传输层的TCP与UDP (7)

4.2传输层端口与 Socket (7)

4.3 用Socket实现基于TCP和UDP的原理 (8)

5 Socket在Java编程语言中的应用以及实现 (9)

5.1 Socket在Java中的工作流程 (9)

5.2 在Java中实现Socket通讯 (9)

5.2.1 创建Socket和ServerSocket对象 (9)

5.2.2 创建服务器端 (10)

5.2.3建立客户端 (10)

6 结论 (11)

参考文献 (13)

基于Socket网络通信协议的应用研究

马文超

摘要:Socket简称套接字,用于实现网络上客户和服务器之间的连接,也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点称为套接字,套接字是在比较低的层次上通信的,不同的操作系统对Socket有不同的支持方式,不同的开发工具,对Socket的实现也均不相同,而且Socket在TCP与UDP两大协议族系中也有各自的工作方式。

关键词:Socket;网络连接;网络通讯

Study Based on the Application of Socket

Network Communication Agreement

Ma Wen-chao

Abstract:Socket called socket, for the realization of the network connection between client and server, meaning that two or more network communication duplex mode there is always a connection between the process, known as the set of the connection endpoint received word, the socket is a relatively low level in the communications, different operating system support for Socket different ways, different development tools, implementation of the Socket are not the same, but in the TCP and UDP Socket Two protocol family lines also have their own work.

Key words: Socket;Network Connection;Network communication

前言

随着网络通信技术的不断发展,Socket开发和研究已成为人们关注的热点。Socke既适用于同一台计算机上的进程间通信,也适用于网络环境中的进程间通信。它已成为当前许多操作系统的网络API,也是网络操作系统中必不可少的基础功能。套接字是通信的基本元件,两个进程为了进行通信,首先必须设置套接字。通俗讲,套接字相当于由其名字连接起来的通信线路的端点,这种连接不仅适用于本地进程之间的通信,而且也使用语远地进程之间的通信。用套接字连接的两个进程可双向通信,且两通信端点的工作方式是不同的,一端须工作于服务方,另一端须工作于客户方。

本文从多个方面介绍了Socket的应用开发、实现环境以及工作流程,并用JAVA开发工具在Windows NT系统上实现网络通讯为例来对Socket套接字做了更加深入的介绍。

1 Socket的定义和工作原理

Socket套接字,英文原义是插座的意思,是进程之间通信的抽象连接点,可以通过一个形象的例子来理解这个概念,现实生活中的电话是人们联系的常用工具,双方只要使用两部电话机就可以交谈,在计算机世界中,两个程序就是使用Socket进行通信的,一个Socket就好比一部电话机,两个程序在网络上通过一个双向链路进行通信,这个双向链路的每一端就成为一个Socket。

进程之间要通信,首先要建立各自的Socket就像要打电话一定要先有电话机一样,打电话时每部电话机都可以说和听。与此类似,每个Socket也都可以进行读、写操作,读、写操作时分别要用到Socket中的输入流和输出流。

建立连接后,客户程序可以向Socket里写入请求,然后服务器会处理这个请求,并把处理结果通过Socket送回。服务器应用程序一般监听一个特定端口以等待一个客户的连接请求,当一个连接请求到达时,客户和服务器建立一个通信连接。在连接过程中,客户被分配一个本地端口号并且与一个Socket连接,客户通过写Socket来通知服务器,通过读Socket来获取信息。类似地,服务器也获取一个本地端口号,它需要一个新的端口号来监听原始端口上的其它连接请求。服务器也给它的本地端口连接一个Socket,读写来自客户的请求。

目前可以使用两种Socket,即流式Socket和数据报式Socket。流式Socket 提供了双向的、有序的、无重复并且无记录边界的数据流服务。TCP即是一种流式Socket协议;数据报式Socket支持双向的数据流,但并不保证可靠、有序、无重复也就是说,一个以数据报式Socket接收信息的进程有可能发送信息重复了,或者和发出的顺序不同。数据报式Socket的一个重要特点是它保留了记录边界。UDP即是一种数据报式Socket协议。

2 支持Socket的操作系统

Socket是网络通讯的基本元件,所有涉及到TCP/IP应用层进程的操作系统都会对Socket有所支持,但不同的操作系统对Socket的支持方式均不相同。2.1 Linux环境中的Socket

2.1.1 Linux的Socket的提出

Linux操作系统与网络联系密切,它不仅具有稳定、简易、高效、兼容性好等特点,并且支持多种网络协议,如IPv4、IPv6、X125、IPX、NETB IOS、DDP 等,

因此被广泛应用于网络服务领域。而在Linux 环境下开发出高性能的网络通信程序,也是充分发挥Linux 网络特性的一个关键因素。在Linux 系统中,套接字(Socket)是介于应用层和传输层之间的编程接口,它提供了访问下层通信协议的大量系统调用和相应的数据结构功能。套接字接口也是应用程序访问下层网络协议的惟一方法。具体地讲,套接字在用户级实现了两个应用程序之间的网络连接和数据交换,所以Linux中的套接字意味着网络上的通信。Linux套接字在网络模型中的地位如图2-1 所示。

图2-1 Linux套接字的网络模型

2.1.2 Linux的Socket的工作方式

Socket在Linux中使用的是标准系统文件描述符(File Descriptor)和其它程序通信的一种方式。一个套接字描述作为一个通信连接的一端,在一个网络通信连接中的两端通信程序应各自有一个套接字来描述它们自己那一端,不同主机中的两个进程通过各自的套接字发送和接收消息,从而实现了进程间跨网络的通信。Linux的套接字支持多种网络协议,不同类型网络协议的工作方式不同,所使用的地址格式也完全不同。对于各种网络协议而言,使用相同地址格式的几个协议称为一个协议地址族,表2-1列出了套接字的常见地址族。

表2-1 Linux套接字地址族的主要类型

Linux将套接字地址族抽象为统一的套接字接口,该接口是应用程序的开发接口,由各地址族专有的软件支持。Linux socket支持以下常见套接字类型:(1)SOCK_STREAM(数据流套接口):提供一个面向连接的双工顺序数据流传输和可靠的数据传输服务。这种套接字可以保证数据传输的可靠性,不会出现数

据丢失、破损或重复出现等差错,而且通过流量控制可避免发送的数据流超限。它是最常见的套接字类型,文件传输协议(FTP)即使用流式套接字,Internet 中的TCP协议也支持流套接字。

(2)SOCK_DGRAM(数据报套接口):提供一个无连接和不可靠的双工数据传输服务。数据包以独立包形式被发送和接收,不对数据的传输提供无错保证,即数据可能被丢失、破坏,也可能被重复接收。Internet中的UDP协议支持这种套接字。

(3)SOCK_RAW(原始套接口):这种类型的套接字允许对低层协议,如IP 或ICMP 直接访问;可以直接填充IP、TCP、UDP或者ICMP的包头,发送用户自己定义的IP包或者ICMP包。它主要用于协议的开发。

2.2 Windows NT系统环境中对Socket的支持

2.2.1 Winsock(Windows Socket)的提出

90年代初,由Microsoft联合其他几家公司共同制定了一套Windows环境下的网络编程接口,即Windows Socket规范。它是Berkeley Sockets的重要扩充,主要体现在它增加了一些异步函数和符合Windows消息驱动特性的网络事件异步选择机制。Windows Socket规范是一套开放的支持多种协议的Windows 下的网络编程接口。目前实际应用中的Windows Sockets规范主要有1.1版和2.0版,其中1.1版只支持TCP/IP协议,而2.0版支持多协议,并具有良好的向后兼容性。目前Windows下的Internet软件基本都是基于WinSock开发的。Windows Sockets规范定义并记录了如何使用API和Internet协议族(TCP/IP 协议族)连接,尤其要指出的是所有的Windows Sockets实现都支持流套接口和数据报套接口。应用程序调用windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如图2-2所示。

图2-2 应用程序与Windows Socket关系图

3.2.2Winsock的原理

Socket实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有Socket接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个Socket接口来实现。在应用开发中就像用文件句柄一样,可以对Socket

句柄进行读、写操作。

3.2.3 Winsock的通讯方式

使用Socket进行通讯的方式有 3种:字节流套接字(StreaSocket):TCP/IP

协议族中TCP协议使用此类接口,它提供面向连接的(建立虚电路)、无差错的、发送顺序致的、包长度不限和非重复的网络信包传输;数据报套接字(Datagram Socket):TCP/IP协议族中的UDP(User.Datagram Protoco1)协议使用此类接口,它是无连接的服务,以独立的信包进行网络传输,信包最大长度为32kB,传输不保证顺序性、可靠性和无重复性,通常用于单个报文传输或可靠性要求不高的场合;原始数据包套接字(RawSocket):提供对网络下层通信协议(如IP协议)的直接访问,一般不是提供给普通用户的,主要用于开发新的协议或用于提取协议较隐蔽的功能。其中字节流套接字是最常用的套接字类型。

3 Socket开发工具的讨论

套接字是通信的基石,是支待TCP/IP协议的网络通信的本操作单元,所以在各种网络应用程序中,凡是涉及到数据传送和接收,一般都会使用Socket.

3.1 C#中socket编程实现

Visual C#主要网络功能主要使用.Net FrameWork SDK中的提供的二个命名空间"https://www.360docs.net/doc/8219054865.html,.Sockets"和"https://www.360docs.net/doc/8219054865.html," 而实现Socket使用的是命名空间"https://www.360docs.net/doc/8219054865.html,.Sockets" 中的Socke类.在.Net中https://www.360docs.net/doc/8219054865.html,.Sockets命名空间为需要严密控制网络访问的开发人员提供了Windows Sockets (Winsock)接口的托管实现。.Net 类可以视为包含3个层次:请求/响应层、应用协议层、传输层。 Socket类处于传输层。https://www.360docs.net/doc/8219054865.html,命名空间中的所有其他网络访问类都建立在该套接字Socket实现之上。Visual C#通过创建Socket类的实例来实现Socket 的托管。

在 Visual C#中首先创建Socket对象的实例,创建完Socket实例后,可以通过此Socket实例的Bind方法绑定到网络中指定的终结点,也可以通过其Connect方法向指定的终结点建立的连接。连接创建完毕,就可以使用其Send 或SendTo方法将数据发送到Socket;同样使用其的Receive或ReceiveFrom方法从Socket中读取数据。在Socket使用完毕后,请使用其的Shutdown方法禁用Socket并使用Close方法关闭Socket。

3.2 Delphi中socket的操作方法

根据连接发起的方式以及本地Socket要连接的目标,Socket之间的连接可以分为:客户端连接、监听连接以及服务器端连接。

Delphi分别使用ClientSocket组件和ServerSocket组件来操纵客户端Socket和服务器端Socket的连接和通信。ClientSocket组件为客户端组件。它是通信的请求方,也就是说,它是主动地与服务器端建立连接。ServerSocket 组件为服务器端组件。它是通信的响应方,也就是说,它的动作是监听以及被动接受客户端的连接请求,并对请求进行回复。ServerSocket组件可以同时接受一个或多个ClientSocket组件的连接请求,并与每个ClientSocket组件建立单独的连接,进行单独的通信。

3.2.1 ServerSocket的属性设置

(1)Port是通信的端口,必须设置。

(2)ServerType服务器端读写信息类型,设置为stThreadBlocking表示异步读写信息,本文实例中采用这种方式。

(3)ThreadCacheSize,客户端的最大连接数,就是服务器端最多允许多少客户端同时连接。

3.2.2 ClientSocket的属性

(1)Port,是通信的端口,必须与服务器端的设置相同。否则可能导致两个组件发送的目标端口和接收的端口不一致,无法建立有效的信息传送连接。(2)ClientType,客户端读写信息类型,应该与服务器端的设置相同,为ctNonBlocking 示异步读写信息。

4 Socket在TCP与UDP协议集中的工作方式

4.1 传输层的TCP与UDP

TCP/IP协议体系结构中的传输层有两个并列的协议:TCP和UDP。其中TCP 是面向连接的,它在两个TCP端点之间支持面向连接的、可靠的传输服务。UDP 是无连接的,用于在两个UDP端点之间支持无连接的、不可靠的传输服务。一般情况下,TCP和UDP共存于一个网间网中,前者提供高可靠性服务,后者提供高效率服务TCP/IP协议族的层次结构如图4-1 所示

图4-1 TCP/IP协议族的层次结构

4.2传输层端口与 Socket

在进程通信的意义上,网络通信的最终地址不仅仅是网络层提供的主机IP 地址,还应该包括描述进程的某种标识符,因此TCP和UDP都提出了协议端口的概念,用于标识通信的进程。具体地说,端口用来标识应用层进程。。

每个端口都拥有一个称做端口号的整数标识符,用于区分不同端口。由于TCP和UDP是完全独立的两个软件模块。因此各自的端口号也相互独立,也就是说,TCP和UDP都有70端口,而两个端口都不会冲突。根据TCP和UDP的报文格式的规定,两个协议分别提供65536个不同的端口值。端口号分为两类:一类是由因特网指派名字和号码公司I-CANN负责分配给一些常用的应用层程序固定使用的熟知端口,其数值一般为0~1023,其中TCP和UDP均规定小于

256 的端口号作为保留端口。例如FTP用1、Telnet用23、SMTP用25、DNS用53、HTTP用80、SNMP用161等。当一个新的应用程序出现时,必须为其指派一个熟知端口,否则其它的应用进程就无法与其进行交互;另一类是自由端口,端口分配使用动态联系方式,也称为本地分配。进程需要访问传输服务时,向本地操作系统提出动态申请,操作系统返回一个本地惟一的端口号,进程在通过合适的系统调用将自己和相应端口号联系起来。当进程要与远地进程通信前,首先申请一个自由端口,然后根据全局分配的公认端口号与远地服务器建立联系,才能传输数据。

Socket由4BSD UNIX首先提出,目的是解决网间网进程通信的问题。进程通信前,双方首先各自创建一个端口,每一个Socket有一个本地惟一的Socket 号,由操作系统分配,Socket包括IP地址(32位)和端口号(16位),共48位。插口、端口和IP地址的关系如图4-2所示。

图4-2 插口、端口和IP地址的关系

4.3 用Socket实现基于TCP和UDP的原理

Socket有两种主要的操作方式:面向连接的和无连接的。面向连接的Socket 操作就相当于电话,当两个人通话时。他们必须建立一个连接,所有的事情在到达时的顺序与它们出发时的顺序是一样的,面向连接的BSD UNIX Socket的工作流程如图4-3所示。无连接的Socket操作就像是一个邮件投递,多邮件可能到达时的顺序与出发时的顺序不一样。

图4-3 面向连接的客户端/服务器时序图

使用哪种模式由应用程序的需要决定。如果可靠性更重要的话,用面向连接的操作会好一些。比如文件服务器需要它们的数据正确性和有序性。如果一些数据丢失了,系统的有序性就会失去。一些服务器,比如间歇性地发送一些数据块,如果数据丢了的话,服务器并不想再重新发送一次。因为当数据到达的时候,它可能已经过时了。确保数据的有序性和正确性需要额外的内存消耗,额外的费用将会降低系统的回应效率。

无连接的操作使用数据报协议。一个数据报是一个独立的单元,它包含了所有的这次投递信息。把它想象成一个信封,它有目的地址和要发送的内容。这个模式下的Socket不需要连接一个目的的Socket,它只是简单地投出数据报。无连接的操作是快速和高效的,但是数据的安全性不佳。面向无连接的BSD UNIX

Socket工作流程如图4-4所示。

图4-4 面向无连接的客户机/服务器时序图

5 Socket在Java编程语言中的应用以及实现

5.1 Socket在Java中的工作流程

Java编程语言是现在Internet上最流行的一种编程语言。一般来说,网络中互相通信的两端,其中提供服务的一端叫服务器,而请求服务的一端叫客户机。Socket通常用来实现Client/Server设计过程,所谓Client/Server是指通信双方一方作为服务器(Server)等待客户(Client)提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应客户,同时继续监听服务端口,使其它客户的请求也能及时得到处理。一般连接过程是:Serve端Listen (监听)某个prot(端口)是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息,一个连接就建立起来了。Server 端和Client端都可以通过Send、Write等方法与对方通信。

5.2 在Java中实现Socket通讯

5.2.1 创建Socket和ServerSocket对象

首先在服务器端,通过创建ServerSocket类对象,来创建服务器对象,其格式如下:

ServerSocket服务器对象名=new ServerSocket(端口号);

然后通过调用accept()方法来创建一个Socket对象,其格式如下:Socket对象名=服务器对象名accept();()

服务器端可以利用这个Socket对象与客户端进行通讯,用下面的语句得到输入流和输出流:

BufferedReader in=new BufferedReader(new InputStreamReader(Socke对象名.getInputStream()));

PrintWriter out =new PrintWriter(Socket对象名.getOutPutStream()true,);

随后就可以使用in.readLine()方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据.从而可以根据程序的需要对客。户端的不同请求进行回应。

在所有通信结束后,应该关闭输入流和输出流,释放系统资源.关闭的顺序是先关闭输入流和输出流,然后再关闭Socket,调用的方法均为close方法。

5.2.2 创建服务器端

下面创建了一个简单的服务器端测试程序的部分语句:

ServerSocket thisServer=new ServerSocket(8186);

Socket thisSocket=theServer.accept();

BufferedReader in =new BufferedReader(new InputStreamReader (thisSocket.getInputStream()));

PrintWriterout Out=new PrintWriter(newOutputStreamWriter (thisSocket.getOutputStream(),true );

String str=in.readLine();

下面的程序段是服务器测试程序,服务器接收客户机发来的信息,并显示在屏幕上:

import https://www.360docs.net/doc/8219054865.html,.*;

import java.io.*;

public class ServerTest

{Public static void main(String args[ ])

{

ServerSocket serversocket;

Socket clientSocket;

DataOutputStream dataOutput;

DataInputStream dataInput;

String receiveString;

clientSocket=serverSocket.accept();

dataOutput =new dataOutputStream

(clientSocket.getOutputStream());

dataInput=new dataInputStream(clientSocket.getInputStream());

dataOutput.writeUTF(sendString);

5.2.3建立客户端

与建立服务器端相比,客户端要简单一些,客户端只需用服务器所在机器的IP以及服务器的端口作为参数创建一个Socket类对象。得到这个对象后,就可以实现数据的输入与输出。

下面的程序代码创建了一个Socke类对象client,client连接到IP地址为192.168.1.22的主机上的端口为8186的服务器,并且建立了输入和输出流,分别对应服务器的输出和客户端的输入。

Socket client=new Socket("192.168.1.22"8186);

BufferedReader in=new BufferedReader(new InputStreamReader (client.getInputStream()));

printWriter out =new printWriter(client. getOoutputStream(),true);

这里只是简单介绍了https://www.360docs.net/doc/8219054865.html,包中的Socket和ServerSocket类中的常用方法,以此来实现使用Socket进行通信。其实除此之外,Java语言与网络操作相关的包还有java.io、java.applet、java.util、java.sql、java.rmi 和java.mail等。

6 结论

本文详细介绍了Socket套接字在不同的操作系统,不同编程语言以及不同的协议集中的实现和支持情况,最后用Java编程语言利用Winsock(Windows Socket)套接楼实现网络通讯的实例,更进一步的介绍了Socket更为详细的工作流程,最终得出:Socket套接字就是工作在TCP/IP参考模型的传输层之上、引用层之下的一个API通道,由它来连接TCP/IP参考模型的应用层与下三层数据通道。

谢辞

经过这些天的努力,我终于完成了基于Socket网络通信协议的应用研究论文。在此我非常感谢我的指导老师,感谢她对我的悉心指导与帮助。当我无力面对制作论文过程中的难题时,他细心地记下我的问题,在百忙之中抽空为我解决各方面的问题。给我解决了很多我以前不懂的问题,也使我掌握了很多有用的东西,同时我也学到了很多新鲜的知识点。也感谢学院给我这样一个机会,制作毕业设计的过程虽是对我们所学知识的检查,但更多的是使我们的专业知识有了提升,用到实际生活中去了。

参考文献:

[1] 方军,吴晓冰.中间件TCP/IP网络接口的实现[J].微电脑世界周刊,1999, (29) :74-77

[2] 于涛.基于Socket通讯技术的上层监控软件的实现[M].计算机技术与发展,2009,03(10):26-27

[3] 邹月.Socket的网络编程研究与实现.电脑编程技巧与维护,2009,08.

[4] 李巧玲.基于C#-Socket的网络通信程序设计.福建电脑,2009,04.

[5] 罗亚非.基于TCP的Socket多线程通信.电脑知识与技术,2009,03.

[6] 陈晓舟.使用Socket组件开发C/S网络考试系统.硅谷,2009,04.

[7] 徐小蕾.分层系统Socket通信软件的设计与实现.计算机应用与软件.2009,01.

[8] 郭东升.Linux环境下基于Socket的网络通信.软件导刊,2009,01.

[9] 王丰锦,邵新宇.基于Socket和多线程的应用程序间通信技术的研究[J].计算机应用,2000,20(6):65-67

[10] Workflow Management Coalition.WfMC-TC00-1003,1995.The Workflow Reference Model[S].

[11] Wong RW,Rabie.Hisrologic And Ultrastructual Ttudy On Statin Graft In Rabbit Skulls.J Oral Maxillofac Surg,2005,63(10):1515-1521.

.

专业论文

题目:基于Socket网络通信协议的应用与研究姓名: 马文超

学院: 计算机与信息工程学院

专业: 电子信息科学与技术

班级: 062

学号: 064633231

指导教师: 白涛职称: 教师

2010年5月18日

新疆农业大学教务处制

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/8219054865.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

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 参数:已下载的摄像头数量 说明:同上传摄像头的说明

模块通信协议

YL-0202通信协议 一、说明 本协议支持0~FF的全数据的传送,移植到其它通讯中可支持全双工通信模式,且带有自同步功能,无需超时。 二、串口 波特率:9600,1位起始位,1位停止位,8位数据位,无奇偶校验。

三、帧格式 1.命令帧格式概述 a.命令头——固定0x7F(数据中若有0x7F则发送双个0x7F,详见2) b.命令长度——命令长度包括:命令长度(1 byte)+命令字(1 byte)+数据(n byte),长 度不超过0x7E,不小于2 c.命令字——详见四:命令表 d.数据——n字节数据。 e.校验——校验内容包括:命令长度(1 byte)、命令字(1 byte)、数据(n byte)。 2.命令头说明 命令头固定为0x7F,数据或命令中若含有0x7F,则用(0x7F、0x7F)代替,此代替行为只传输时,所以在计算长度或校验时只按原数据计算,即一个0x7F。 如原命令:7F 0A 03 10 7F 37 50 7F 35 01 4A 实际传输数据为:7F 0A 03 10 7F 7F 37 50 7F 7F 35 01 4A 除去命令头实际传输数据共12字节,但命令长度则为0A即10字节,校验同理。 3.校验说明 校验为所有校验内容的异或值,校验函数如下: private byte checkSum(byte[] data, int offset, int length) { byte temp = 0; for (int i = offset; i < length + offset; i++) { temp ^= data[i]; } return temp; }

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或