TCP或UDP帮助c#中的服务器/客户端?

时间:2009-07-04 13:32:02

标签: c# .net tcp udp client-server

任何人都可以提供帮助,我试图想出我需要做什么,我已经被赋予了在TCP(UDP)中编写服务器和客户端的任务。基本上多个客户端将连接到服务器..并且服务器将MESSSAGES发送到客户端。

我在创建服务器和客户端方面没有问题但是使用tcp我不确定该怎么做。是.net 3.5支持所有内容还是我需要继续搜索某些组件?

我正在寻找用于TCP或UDP的c#的好例子。这是我不是100%肯定的地方..据我所知,有UDP和TCP ... 1连接,1不是..那么我去哪个方式,可以c#支持两个?优点/缺点?

假设服务器必须支持多个客户端,我只需要打开1个端口或者我需要打开2个端口吗?

此外,如果客户端崩溃,我需要它不影响SERVER,因此服务器可以忽略它并关闭连接,如果一个打开或超时连接...如果实际上需要再次连接回到tcp UDP

我想知道哪些想法并选择我需要分配的协议和端口数量?

感谢

4 个答案:

答案 0 :(得分:3)

UDP cons:

  • 数据包大小限制意味着您只能发送小消息(少于约1.5k字节)。
  • 缺乏流使得很难保护UDP:难以进行有损交换的身份验证方案,同样难以保护单个消息的完整性和机密性(无需依赖的密钥状态)。
  • 没有交付保证意味着您的目标必须准备好处理消息丢失。现在很容易争辩说,如果目标可以处理完全丢失的消息( 可能),那么为什么还要先发送它们呢?

UDP优点:

  • 无需在服务器上为每个客户端存储系统端点(即没有套接字)。这是连接到数十万个客户端的MMO游戏使用UDP的一个主要原因。
  • 速度:每条消息单独路由的事实意味着您无法像TCP那样遇到流拥塞。
  • 广播:UDP可以向网段上的所有侦听器广播。

如果你也在考虑TCP,你甚至不应该考虑UDP。如果你正在考虑使用TCP意味着你正在考虑一个流(一次订购消息),那么使用UDP会给你的应用程序带来碎片,重试和确认,重复检测和排序的负担。您将很快在您的应用程序中重新发明TCP,并且花费了20年的时间让所有工程师 正确(或者至少与IPv4中的相同)。

如果您不熟悉这些主题,我建议您使用流程并使用WCF,至少它为您提供了相对轻松地切换和切换各种传输和协议的优势。如果您使用原始.Net套接字组件做出错误的选择,将更难以将代码库从TCP更改为UDP,反之亦然。

答案 1 :(得分:2)

听起来我不清楚TCP和UDP之间的区别。

TCP是面向连接的。即2个对等体将具有专用连接。保证数据包传输和订购。通常,服务器将显示一个端口,并且多个客户端可以连接到该端口(考虑HTTP服务器和浏览器)。

UDP是无连接的。它不保证数据包传输,也不保证订购。您可以非常轻松地实现广播和多播机制。如果您需要某种可靠性,则必须在UDP之上实现此功能。有时您可能不在乎,只是发出请求并在没有响应时重试(SNMP会这样做)。因为它是无连接的,所以你并不担心同伴的上升/下降。如果需要,您只需重试。

因此,您对协议的选择取决于上述内容。例如您的客户端是否需要与服务器的专用连接?您是否将相同的数据传输到多个客户端?你能容忍数据包丢失(例如实时价格更新等)。也许在您的应用程序中使用TCP和UDP来满足不同的需求(例如,TCP用于注册订单,UDP用于传输价格更新/事件?)

我会考虑您的要求,并熟悉TCP和UDP的限制和功能。这应该让事情变得更加清晰。

答案 2 :(得分:1)

是否要求在如此低的水平上执行此操作?为什么不使用WCF?它完全支持使用二进制数据传输通过TCP / IP进行消息传递,但它比原始套接字具有更高的抽象级别。

答案 3 :(得分:0)

您需要的一切都在.Net 3.5(可能在下面)。查看MSDN上UdpClient课程的文档和示例,了解如何编写客户端/服务器。快速谷歌在C#的许多其他网络示例中找到了serverclientwww.java2s.com示例代码。不要被域名推迟。