java socket 视频传输-socket传输xml文件
利用sket实现尊宝与C之间的数据传输 刘晓东 李庆元(中国立体测绘科学研究所景湖) 摘要:本文讨论了互联网上的互联网。 通过字节鼓集(bytof)客户端的Java\portlet小程序和服务端应用服务程序的原理、实现方法和注意事项,包括基本数据类型和复杂数据类型的转换连接的字节数组的最大限制nose 和一个发送接收,最后培养出应用和测试结果 Guan tyu: hva, c, socket. 数据传输 随着Internet/Internet的快速发展和广泛应用,信息高速公路已经初具规模。用户不再满足于单机应用系统java socket 视频传输,纷纷要求程序能在Internet/Internet网络环境下运行,Intenlet/Intranet环境下的网络应用系统一般采用Client/Server(客户端-服务器)模式,对于Client/server模式的网络应用系统,可以使用各种软件开发工具进行开发,其中m 比较流行的是使用Java语言或者C语言作为开发工具。 Java和C语言都包含了网络开发的接口(Socket,Socket),供开发者开发应用系统。 大多数网络应用项目选择Java或C中的一种作为开发语言。
这个选择的原因是显而易见的。 由于开发环境是统一的,客户端浏览器和应用服务器定义的数据类型和数据结构是双方都能理解的,有利于开发者方便、合理地了解网络应用系统所需要的数据。 组织,从而提高整个系统的运行效率。 但是在某些情况下还是需要J8va Applet和C Server之间的通信,这是基于以下原因。 (1)页面b中嵌入的Java Applet小程序,目前各种浏览器都可以支持。 因此,在客户端使用Java Applet小程序可以获得跨平台的能力。 (2) 现有的很多系统都是用C开发的,虽然这些系统最初是针对单机用户的,但是有很多有价值的资源,很多模块可以复用。 如果在这些原有的单机系统中继续开发即时界面,完全有可能将单机版开发成网络版。 这样既充分利用了现有资源,又降低了开发成本,缩短了开发周期。 (3)由于Java语言是通过解释的方式执行的,所以用Java开发的服务器程序在运行时不能获得令人满意的运行速度。 用于需要大量分析计算的应用服务程序。 c服务器的运行速度明显高于Java服务器。 综上所述,前端用Java Applet,后端用C server是比较实用的。
本文介绍作者在JavaApplet/c Server程序间通信方面所做的一些实验和经验。 2、Java与C通信原理 Internet/Intranet的基本协议集是TCP/IP协议,1P/IP协议的应用程序开发接口的事实标准是Socket(套接字)。 Java和C都提供了socket编程接口。 Socket 最初由 Berkeley 开发,作为 State Ix 环境中的编程接口。 开发Socket的目的是将复杂的结构和协议隐藏在网络底层,让程序员可以简单抽象地操作网络。 它可以用来构建任何跨操作系统、跨网络协议的分布式处理系统。 一旦一个应用程序向系统申请了一个Socket,就意味着该应用程序获得了一个与其他应用程序通信的输入/输出接口,以及该应用程序与哪个应用程序进行通信。 取决于 IP 地址。 6l使用socket进行通信,有两种方式:第一种是流方式(stretch socket)。 也称为面向连接的方法。 这样,两个正在通信的应用程序之间就必须建立虚拟连接关系。 每次完整的数据传输都要经过建立连接、使用连接和终止连接三个过程。 本质上。 连接是一个管道,其数据以相同的顺序和相同的内容发送和接收。
流方式采用TCP协议。 第二种数据报模式(DatBF Socket)称为无连接模式。 每个数据包都携带一个完整的目的地址。 每个数据包在系统中独立传输。 数据报模式不保证每个数据包都从B到达目的地。而且由于每个数据包在系统中都是独立传输的,所以数据包到达的顺序也是不确定的,数据的校验由B负责上层协议。 数据报方式采用UDP协议。 目前的网络应用系统大多要求安全有序地传输数据,因此基于socket开发的网络应用系统在数据交换中大多采用流传输。 Java Applet 和c Server 通过流式交换数据。 由于客户端程序和应用服务器程序的开发环境不同,双方无法理解对方定义的数据结构。 为实现数据交换,只能先将双方定义的数据结构转换成最基本的二进制码,交换后再将对方传输的二进制码翻译成相应的数据结构。 即数据在网络中只能以单个字节数组(Byte[])传输,在服务端和客户端都添加解释程序,在数据传输前将数据解释为字节数组,传输后接收数据。 将接收到的字节数组转换回相应的数据对象。 (见下图) 程序员 3. Java与C通信需要注意的几个问题 3.1 Java与C基本数据类型的区别 Java和C都有一些对应的基本数据类型,但它们之间也有很大的区别.
以整型数据类型为例,可以看出它们的区别(见下表): 从上表可以看出Java和C的区别,在基本数据类型中,高位和低位J 和 C 的二进制表示也相同。 不一致。 Java语言采用mEE(International Institute of Electrical and Electronics Engineers)754规则,即整数、浮点数、双精度类型的二进制表示,低位在前,高位在后(同uN系统),而在D0s、Bared ws环境中正好相反。 就是前面高位,后面低位。 正确读取整数、浮点数和双精度数据。 接收到该类型数据的字节数组(瞬时端口)后,必须将基本数据类型的字节序倒序为162,然后进行移位操作才能得到正确的数据。 3.2 JC与C之间复杂数据类型的传输 由于开发环境的统一,Jm与a或c与c之间的通信可以传输对象或对象数组。 从上面可以看出,Java8和C之间的基本数据类型无法正确理解,更无法传递复杂的对象和对象数组。 但在实际应用中,必须根据系统的需要传输自定义的数据结构。 我们采取的做法是自己定义复杂数据类型的传输协议。 比如有一个自定义的数据类型P0jnt。 数据结构如下: P int 我们要将一个P int数组从一个用c开发的服务器程序传给javaApp]et,在数据传输前必须将Po int数组转为byte数组,需要两步: (1) 在数据流的前端加入一个包含5个字节的数据头,数据头的第一个字节表示要传输的数据类型,例如l代表Po。 mt,2代表Lim,3代表Polygon,数据头最后四个字节是一个int值java socket 视频传输,用来表示这个数据类型数组的长度。
(2)将要传输的Point数组按结构转换为byIe数组,追加到数据头后。 Java Applet读入整个字节数组,分析数据头中包含的5个字节,然后根据数据头的描述将后续数据翻译成对应的Point数组。 3.3 Java和C 数据传输的数据量限制如上所述。 Java和C之间的数据交换是基于字节数组的,那么一次发送和接收的数据量有没有限制呢? 根据笔者的大量实验,一次发送和接收的数据量是有限的。 当服务器一次发送的数据量超过最大限制时,程序会跳出异常,这个值随着程序的运行环境而变化。 在willdo”98操作系统环境下。 CSer和Arm_最大可发送字节数为1012k,而在wmdows NT wbrkst0n操作系统环境下一次最大可发送字节数为1008k。 因此,当要传输的数据量较大时,必须将原始数据转换成字节数组循环发送。 Jm Applc读取的数据量也是有限制的,当大于这个最大值时,接收到的字节数组的后半部分会定时出错。 因此,对于一次传输的数据量较大的数据包,Java Applet必须设置一个较小的数据接收单元,并以此单元为单位循环接收,以保证数据交换的正确性。
调用Java A 或let 进行数据交换,需要在不同的环境下使用不同的数据接收单元。 在C Server所在机器上调用Java Applet的接收单元为4k字节,在未安装C Server的机器上调用Java Applet,如果客户端操作系统为windows98环境,则数据接收单元为仅128字节:若客户端操作系统为windows Mworkstation环境,数据接收单元仅4字节。 3.4 J"a和C数据传输的应用实例 笔者课题组开发了几种采用不同通信方式的ebGls系统,包括Java-Java通信、Java-c通信、Cc通信。各种通信方式的系统都有其独特的优势其中,Java和C通信方式最大的优势就是服务器运行速度快,大部分使用了原来单机系统的模块,可以处理海量数据,进行各种复杂的分析操作。客户端使用applet,在Netsca IE浏览器下可以很好的工作 下面的应用服务程序是用vc++语言开发的Windows 5.0,客户端程序是用Java语言开发的App是一个小程序。经测试,在局域网(10兆)环境下,传输400万个比例尺(数据量1兆)需要23秒;同时显示4张地图 100万尺度帧(数据量14.7兆字节)。数据传输耗时130秒,图形显示如下图l圈所示。
通过 WAN(拨号电话线、33k 调制解调器)传输 1 兆字节的数据大约需要 10 分钟。 4. 结语 笔者现在开发的JM Applsen 和ebGIs 的通信版本,采用的是胖客户端模式,所有的循环数据都被传输。 cs、v、cs的能力没有得到充分发挥,在广城网络环境下不实用。 作者开发的名为“^senr Xu communication”的wgbGIs版本,使用的是thin client模式,可以在广州市区环境下使用。JV Appl/c serv系统thin client模式下的性能表现可能比JM Sen communication好。刘晓东,李庆元(中国测绘科学研究院)电话 15387295596,28帅94 EmBil地址:Liqjuan”c山岗f莫末信地址:太平北16号北京路政府地理信息系统研究中心邮编:100039