.netC#中的网络

.netC#中的网络,第1张

概述有人可以指点我学习如何在C#/ .net 3.5中进行网络连接吗?欢迎提供代码示例和解释.基本上我正在寻找如何做异步/多线程服务器/客户端模型. 我对使用WinSock在C中完成此 *** 作的基础知识非常满意,但我的所有研究似乎都无法在C#中掌握这一概念. 感谢您提供的任何帮助:) 如果WCF满足您的需求,那值得关注.存在 ZeroC 和其他替代的更高级库.否则,有几种不同的方法可以更接近套接字级别,如 有人可以指点我学习如何在C#/ .net 3.5中进行网络连接吗?欢迎提供代码示例和解释.基本上我正在寻找如何做异步/多线程服务器/客户端模型.

我对使用WinSock在C中完成此 *** 作的基础知识非常满意,但我的所有研究似乎都无法在C#中掌握这一概念.

感谢您提供的任何帮助:)

解决方法 如果WCF满足您的需求,那值得关注.存在 ZeroC 和其他替代的更高级库.否则,有几种不同的方法可以更接近套接字级别,如果这是你需要的.

的TcpClIEnt / UdpClIEnt

这些在底层插座周围提供了相对较薄的包装.它本质上提供了套接字上的Stream.您可以在NetworkStream上使用异步方法(BeginRead等).我不喜欢这个,因为包装器没有提供那么多,它往往比直接使用套接字更加尴尬.

套接字 – 选择

这提供了用于将多个套接字IO多路复用到单个线程上的经典Select技术.不推荐了.

插座 – APM风格

套接字的异步编程模型(AKA IAsyncResult,Begin / End Style)是异步使用套接字的主要技术.并且有几种变体.实质上,您调用异步方法(例如,BeginReceive)并执行以下 *** 作之一:

>轮询完成返回的IAsyncResult(几乎不使用).
>使用IAsyncResult中的WaitHandle等待方法完成.
>将BeginXXX方法传递给方法完成时将执行的回调方法.

最好的方法是#3,因为它通常是最方便的.如有疑问,请使用此方法.

一些链接:

> MSDN Magazine Article on Sockets
> A Jeffery Richter Article on the Asynchronous Programming Model

.NET 3.5高性能套接字

.NET 3.5为使用事件的异步套接字引入了一个新模型.它使用“简化”异步模型(例如,Socket.SendAsync).您没有给回调,而是订阅了一个事件来完成而不是IAsyncResult,而是获得了socketasynceventargs.我们的想法是您可以重用socketasynceventargs并为套接字IO预分配内存.在高性能场景中,使用APM样式可以更加高效.此外,如果您预先分配内存,您将获得稳定的内存占用,减少垃圾收集,固定内存漏洞等.请注意,担心这一点只应在最高性能方案中考虑.

> MSDN Magazine: Get Connected With The .NET Framework 3.5
> MSDN Information with technique for pre-allocating memory

摘要

对于大多数情况,请使用APM样式的回调方法,除非您更喜欢socketasynceventargs / Async方法的样式.如果您在WinSock中使用了CompletionPorts,您应该知道这两种方法都使用了CompletionPorts.

总结

以上是内存溢出为你收集整理的.net / C#中的网络全部内容,希望文章能够帮你解决.net / C#中的网络所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1225267.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存