网络编程低级或类抽象?

时间:2010-10-31 17:12:57

标签: c# .net network-programming winsock sockets

我看到很多关于网络编程主题的问题。尽管所有的问题和答案,我只是不知道哪种方式最好开始。从最低级别开始,还是立即在.NET C#中工作,而不是在抽象下面详细介绍是不是更好?在Linux中使用Winsock或BSD Socket编程更好吗?

3 个答案:

答案 0 :(得分:1)

你仍然可以在C#中进行低级TCP或UDP编程,所以在这一点上,你是否想用C,C#等编写网络代码实际上只是一个选择...如果你正在尝试要做的是学习如何编写网络代码,我认为语言更多是个人选择,因为底层网络概念保持不变。

答案 1 :(得分:1)

.NET C#

你有:

  
      
  • 低级API,可与TCP,UDP等协同工作。
  •   
  • .NET Remoting
  •   
  • WCF(http,tcp,命名管道,MSMQ)
  •   

我会建议最后一个选项,但取决于你想要学习什么exaclty: 构建分布式应用程序或低级套接字API的细节。

答案 2 :(得分:1)

这完全取决于您现有的编程技巧。我不会从较低级别开始,例如Socket类(或TcpClient / UdpClient),而不至少对异步编程有基本的了解。

许多以套接字编程开始的人为读取启动了一个单独的线程,因为Read方法阻塞了。这是解决问题的非常无效方式,尤其是在服务器中。 BeingRead / EndRead是要走的路。

接下来是设计传输协议,因为TCP不保证完整的消息在一个传递。它只保证您的邮件以正确的顺序到达。

套接字编程的下一个重点是如何处理传入的数据。一个新手的错误是开始附加字符串,这将导致服务器应用程序中的大量内存使用。使用byte[]缓冲区和缓冲池(flyweight模式)来管理传入的数据(如果您制作了精心设计的协议,这应该是一项简单的任务)。

正如你所看到的,没有任何经验,这是一项非常重要的任务。 WCF是一个更好的选择,因为它可以为你处理大部分内容。