Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#.net中通过套接字序列化和反序列化多个对象_C#_Sockets_Serialization_Deserialization - Fatal编程技术网

在c#.net中通过套接字序列化和反序列化多个对象

在c#.net中通过套接字序列化和反序列化多个对象,c#,sockets,serialization,deserialization,C#,Sockets,Serialization,Deserialization,我正在为我正在写的项目学习C#.net上的socket编程 该项目将是一个多客户端系统,其中客户端服务监控系统资源并向中央服务器报告 我正在研究远程处理、WCF等,以确定哪种方式最适合我。我决定使用套接字编程,因为有很多要求: 插槽比其他插槽速度快,开销小 我可以支持服务器上每个资源的更多连接 Sockets可以,尽管做了一些修改,但也允许我与基于UNIX的系统进行交互 我可以自己在代码中对链接进行加密,而不必依赖SSL证书 我在这里的想法可能是错的?如果我是,请告诉我。有人建议WCF,因为

我正在为我正在写的项目学习C#.net上的socket编程

该项目将是一个多客户端系统,其中客户端服务监控系统资源并向中央服务器报告

我正在研究远程处理、WCF等,以确定哪种方式最适合我。我决定使用套接字编程,因为有很多要求:

  • 插槽比其他插槽速度快,开销小
  • 我可以支持服务器上每个资源的更多连接
  • Sockets可以,尽管做了一些修改,但也允许我与基于UNIX的系统进行交互
  • 我可以自己在代码中对链接进行加密,而不必依赖SSL证书
我在这里的想法可能是错的?如果我是,请告诉我。有人建议WCF,因为它“使用起来很方便”,可以做我想做的一切,但我认为它的运行速度要慢得多

我的主要问题是,虽然客户端机器不会保持连接打开,但可能有数千或上万台客户端机器,我必须假设机器将受到连接的冲击。考虑到每个客户端之间连接的最短时间可能只有1分钟

现在我面临的问题是:如何通过链接发送多个对象,更重要的是如何确定它们在另一端是什么?

我假设这在一个连接上是可能的,因为我读过很多这样的文章,尽管它们描述的方法不同,示例也不同

问题是,我找不到任何实际做到这一点的例子。没有示例显示如何发送多个对象,然后如何确定它们在另一端是什么


有人能帮我吗?或者给我举个例子。一旦我有了工作的基础,我就完全能够把事情弄清楚。

你可能想在这里重新发明轮子。但是,既然您已经下定决心要使用套接字(在那里,做过,学到了很多),请阅读有关序列化的链接:


这感觉就像是过早优化和重塑车轮的经典案例。我可能弄错了,因为我不知道您的性能要求、开发资源和时间框架是什么。但我怀疑非常聪明的人在你之前也有同样的问题。他们提出了各种各样的解决方案,包括HTTP(SOAP,REST)和(如果您需要statefull协议)。即使在应用程序级别,也可以做很多事情来提高性能(最大限度地减少通过有线传输、缓存等方式发送的数据量)。没有直接使用套接字带来的复杂性开销。你可能知道所有这些,但我强烈建议你再次评估你的决定

对于XML和JSON等常见的序列化格式,您可能还需要了解:

协议缓冲区是所使用的二进制序列化格式的名称 他们的大部分数据通信都由谷歌负责。其目的是:

  • 体积小-高效数据存储(远小于xml)
  • 便宜可在客户端和服务器上处理
  • 平台独立-在不同编程架构之间可移植
  • 可扩展-向旧邮件添加新数据

当你说“在这里重新发明轮子”你到底是什么意思?如果有更好、更快、更标准的方法,我会洗耳恭听。但是我可能会从你所说的从底层开始学到很多。好吧,在看了这些之后,我假设你是在指导我使用JSON或XML来发送我的对象。这是正确的吗?现在应该这样做吗?请记住,我所举的大多数例子都是2008/2009年前后通过网络发送的信息应该很小。与reference类似的程序是HoundDog(现在归GFI所有,称为GFI MAX)。客户端本质上是非常轻量级的,您将它们设置为每分钟/秒监控一次。它们根据需要发送警报,还发送ping,让HQ服务器知道它仍然处于活动状态。因此,数据确实非常少。问题更多的是关于将有多少客户端的问题:每个服务器可能有数千个客户端。你认为使用WCF是更好的选择吗?我只是担心以后我会把一切都拖出来。至于时间框架,这是我自己的项目(还有其他项目),我失业时正在做。所以通常我有我需要的所有空闲时间。我确实想学习socket编程,但我也想在一两个月内看到一个工作模型。老实说,我不介意使用更新的方法(或封装),如果它们能长期工作的话。。。然后我转向ASP.NET Web表单,并且已经在那里工作了很多年,所以这是我第一次回到Windows表单编程领域。我知道两者之间的区别,并且对人际网络也很了解。简单地说,我将继续其他人在文章和帮助博客等中所说的话。许多人说WCF“很重”,但正如你所说的“使用套接字引入的复杂性开销”也可能让我感到不快。。。Sheesh,这从来都不简单,是吗:)使用能让您启动并以最快速度运行的技术,简单的WCF+HTTP可能是一个不错的选择。在确定瓶颈之前,不要进行优化。如果序列化是瓶颈,请尝试使用“精简”格式,如proto缓冲区。