1

现在,我很想知道 - 如果我的程序通过 TCP 连接到服务器并且服务器向我的程序发送消息,但我同时发送 UDP 数据包,TCP 数据包会发送给我吗? 一切都在一个班级!

谢谢你的帮助!

4

3 回答 3

0

简短的回答 - 是的。 您可以同时拥有多个连接,全部发送和接收;假设您有多个套接字。

您没有提及您的服务器必须处理的客户端数量,或者您正在处理发送/接收的数据。根据您的实现,可能还需要多个线程(正如 Dariusz Wawer 指出的那样,这不是必需的,但我提到它们是因为可以处理大量客户端的可扩展解决方案可能会使用线程)。

查看这篇关于 TCP 和 UDP 端口的帖子以获取更多信息: TCP 和 UDP 端口解释

可以在此处找到一个很好的示例 C# 教程:C# 教程 - 简单线程 TCP 服务器

于 2013-01-23T11:30:41.990 回答
0

取决于您所说的“同时”是什么意思。通常答案是“是”,您可以有多个 TCP/IP 连接和多个 UDP 套接字,它们都同时发送和接收。

除非你真的担心延迟——几微秒就会给你带来麻烦。如果是这种情况,一个连接可能会干扰另一个连接。

于 2013-01-23T11:34:01.973 回答
0

您的问题实际上是所有网络应用程序程序员必须了解和考虑的几个问题的边界。

首先:从网络接收到的所有数据都存储在操作系统的内部缓冲区中,等待读取。缓冲区不是无限的,因此如果等待的时间足够长,可能会丢失一些数据。通常写入的数据块是单个数据包,但并非总是如此。您永远无法假设在 TCP/IP 通信中可以读取多少数据。另一方面,在 UDP 中,您必须始终读取单个数据包,否则数据将丢失。您可以使用它recvfrom来读取 UDP 数据包,我建议使用它。

其次:使用阻塞和非阻塞方法是您的网络应用程序最重要的决策之一。网上有很多关于它的资料:C-Unix Sockets - Non-blocking readblocking read vs non-blocking read的定义是什么?非阻塞教程

至于线程:线程永远不需要编写多连接处理程序应用程序。有时它们会简化您的代码,有时它们会使其运行得更快。有一些众所周知的使用线程的编程模式,例如在单独的线程中处理每个单独的连接。通常情况下,特别是对于没有经验的程序员来说,使用线程只会成为奇怪错误和头痛的根源。

我希望我的帖子能回答你的问题,并解决我在另一个答案下面的讨论。

于 2013-01-23T12:08:38.120 回答