首页 文章

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

提问于
浏览
0

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

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

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

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

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

任何想法,我shoudl beging并选择我需要分配哪些协议和端口数量?

谢谢

4 回答

  • 1

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

  • 3

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

  • 0

    UDP缺点:

    • 数据包大小限制意味着您只能发送小消息(少于约1.5k字节) .

    • 缺乏流使得很难保护UDP:难以进行有损交换的身份验证方案,同样难以保护单个消息的完整性和机密性(无需依赖的密钥状态) .

    • 没有交付保证意味着您的目标必须准备好处理消息丢失 . 现在很容易争辩说,如果目标可以处理完全丢失的消息(这是可能的)那么为什么还要先发送它们呢?

    UDP优点:

    • 无需为每个客户端在服务器上存储系统 endpoints (即没有套接字) . 这是连接到数十万个客户端的MMO游戏使用UDP的一个主要原因 .

    • 速度:每条消息单独路由的事实意味着您无法像TCP那样遇到流拥塞 .

    • 广播:UDP可以向网段上的所有侦听器广播 .

    你也不应该考虑使用TCP . 如果您正在考虑TCP意味着您正在考虑流( exactly once in order messages )并且使用UDP将在您的应用中承担碎片,重试和确认,重复检测和排序的负担 . 你将很快在你的应用程序中重新发明TCP,并且花费了20年的所有工程师才能做到这一点(或者至少与IPv4中的一样) .

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

  • 2

    听起来像你不清楚TCP和UDP之间的区别 .

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

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

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

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

相关问题