C#+ICE+TCP通信=数据传输

最近项目中运用到了ICE文件传输。第一课(ICE的介绍)

  一、 介绍ICE

ICE(Internet Communications Engine)是Zeroc提供的一款高性能的中间件。使用ICE能使得(C#、php、c++、java或python)与java,c++,.net,python等进行交互。基于ICE可以实现电信级的解决方案。 ICE,是一种流行的面向对象的中间件,用来作网络通讯引擎。

二、ICE 的好处

  1. 面向对象的语义,所有的操作调用都使用迟后绑定。
  2. 支持同步和异步的消息传递,提供了同步和异步的操作调用和分派,提供了发布——订阅消息传递机制。
  3. 与硬件架构无关,客户端及服务器与底层的硬件架构屏蔽开来。对于应用代码而言,像字节序和填充这样的问题都隐藏了起来。
  4. 与上层的编程语言无关,客户端和服务器可以分别部署,所用语言也可以不同,支持C#、C++、Java语言,客户端支持PHP语言。
  5. 与采用的操作系统无关,ICE完全是可移植的,同样的源码能够在Windows、Linux、MacOS和UNIX上编译和运行。
  6. 完全是线程化的,其API是线程安全的。
  7. 采用TCP、IP 和UDP作为传输协议,客户端和服务器代码都不需要了解底层的传输机制。
  8. 服务器的位置是对用户透明的,ICE例程负责定位对象,并管理底层的传输机制,比如打开和关闭连接。客户与服务器之间的交互显得像是无连接的。服务器可以迁移到不同的物理地址,而不会使客户持有的代理失效,而客户完全不知道对象实现是怎样分布在多个服务器进程上的。

三、为什么要使用中间件?

设想一个这样的场景:对于一个大型网站来说,往往有很多个web服务器,每个web服务器都存在很多对于数据库的操作。如果直接在程序上直接操作数据库,那么势必要在每台web

服务器都配置数据库的用户名,密码等信息,这是极度不安全的。并且如果我们要统一对数据库的操作进行管理和修改等,那么久要去每个web服务器上修改。因此,这时候中间件就产

了。

它是基于SOA(面向服务架构)的思想,将对数据库的操作统一成一个服务,放置于一台服务机上,每个web服务器要对数据库进行操作,就可以直接访问这个提供中间件服务的服务

器。还有一点,考虑到性能问题,这里的提供服务的机子我们不使用html和xml传输数据,一般使用TCP,UDP这层的通信。因此ICE就是现在非常流行的网站开发中间件之一。

四、ICE通信结构图

ICE有分为提供服务的一方Server和寻求服务的一方Client,两台机子上都需要安装ICE组件,他们的通信结构如下:

Client端应该事先知道Server端能提供的服务是什么,有什么格式?这就是图中的Proxy Code,在Proxy Code中定义好了类和接口。Server端中接口定义的就是Skeleton,具体实现接

口的是Server Application,Server Application可以是C++,java,C#等写的,但是ICE不提供PHP写Server端。

C#+ICE+TCP通信=数据传输

时间: 2024-08-19 11:18:17

C#+ICE+TCP通信=数据传输的相关文章

C# 实现TCP通信

1.TCP/IP层次模型 当然这里我们只讨论重要的四层 01,应用层(Application):应用层是个很广泛的概念,有一些基本相同的系统级TCP/IP应用以及应用协议,也有许多的企业应用和互联网应用.http协议在应用层运行. 02,传输层(Tanspot):传输层包括UDP和TCP,UDP几乎不对报文进行检查,而TCP提供传输保证. 03,网络层(Netwok):网络层协议由一系列协议组成,包括ICMP.IGMP.RIP.OSPF.IP(v4,v6)等. 04,链路层(Link):又称为物

Socekt的TCP通信

本示例讲解如何通过go语言的net包实现TCP通信的. 在服务端创建监听地址,接收发送过来的数据信息,为了解决粘包问题,使用包头+数据的格式,根据包头信息读取到需要分析的数据.形式如下图: golang粘包问题包头定义 从数据流中读取数据的时候,只要根据包头和数据长度就能取到需要的数据.这个其实就是平时说的协议(protocol),只是这个数据传输协议非常 简单,不像tcp.ip等协议有较多的定义.在实际的过程中通常会定义协议类或者协议文件来封装封包和解包的过程.下面代码演示了封包和解包的过程:

[网络篇]ESP8266-SDK教程(三)之TCP通信Server<->Client

纳尼?昨天刚刚打印了个"Hello World!",今天你就让我学习TCP通信?有没有搞错~哈哈,相信很多读者会很迷,其实学习这东西嘛,单单学一些比较简单的,相信没两天就没人看了,所以咱就在基础篇和网络篇穿插着去学习一下ESP8266,毕竟兴趣才是最好的老师嘛!大家以后遇到问题了,来翻文章建议大家根据[XX篇]去快速定位该去哪一篇文章中去查找问题,当然具体会在哪一篇文章中有讲,也不一定了,后面也会穿插着写一点[项目篇][进阶篇][闲扯篇],总的来说就是,本系列文章并没有固定的路线,大家

TCP协议与TCP通信

1 TCP协议 TCP协议是面向连接的通信协议,即在传输数据前先在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输. 在TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求,每次连接的创建都需要经过"三次握手". 第一次握手,客户端向服务器端发出连接请求,等待服务器确认 第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求 第三次握手,客户端再次向服务器端发送确认信息,确认连接 下载文件时必须采用TCP协议. 2 TC

TCP通信详解

一.TCP简介 1.TCP介绍 a>TCP协议:TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为:TCP)是一种面向连接的.可靠的.基于字节流的通信协议 1.面向连接:先连接,再通信,好比打电话模型 2.可靠的,相对于UDP,TCP传输更可靠,TCP通过一序列的机制(面向连接机制.发送应答机制)来保障传输的可靠性 3.基于字节流的,UDP创建UDP socket--DGRAM:基于数据报通信方式,每一次发送的数据都是一个独立的整体,包含目标主机的

TCP通信粘包问题分析和解决

TCP通信粘包问题分析和解决(全) 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小.数据量小的数据,合并成一个大的数据块,然后进行封包.这样,接收端,就难于分辨出来了,必须提供科学的拆包机制. 对于UDP,不会使用块的合并优化算法,这样,实际上目前认为,是由于UDP支持的是一对多的模式,

JAVASE02-Unit010: 多线程基础 、 TCP通信

多线程基础 . TCP通信 * 当一个方法被synchronized修饰后,那么 * 该方法称为同步方法,即:多个线程不能同时 * 进入到方法内部执行. package day10; /** * 当多线程并发操作同一资源时,由于线程切换的不确定 * 性,可能导致执行顺序的混乱,严重时可能导致系统 * 瘫痪. * @author adminitartor * */ public class SyncDemo1 { public static void main(String[] args) { f

epoll实现IO复用,TCP通信

函数原型: 函数说明:该函数允许进程指示内核等待多个事件中的任何一个发生,并只在有一个或多个事件发生或经历一段指定的时间后才唤醒它. 参数说明: fds:是一个struct pollfd结构类型的数组,用于存放需要检测其状态的Socket描述符: 每当调用这个函数之后,系统不会清空这个数组,操作起来比较方便:特别是对于socket连接比较多的情况下,在一定程度上可以提高处理的效率:这一点与select()函数不同,调用select()函数之后,select()函数会清空它所检测的socket描述

NetworkComms V3 使用TCP通信传递IList<T>类型的数据

客户端从服务器获取一组IList<T>类型的数据非常常见(通常从数据库中获取) 我们用NeworkComms V3来演示一下(NetworkcommsV2.x版本也同样支持) [ 使用protobuf.net序列化器] 第一步创建相关的工程文件: MessageContract中的 User类为契约类,使用protobuf.net进行序列化 写法如下: using System; using System.Collections.Generic; using System.Text; usin