现在,我有兴趣知道 - 如果我有一个通过TCP与服务器连接的程序,并且服务器向我的程序发送消息,但是我同时发送UDP数据包,那么TCP数据包来找我?一切都在一堂课中!
感谢您的帮助!
答案 0 :(得分:0)
简短回答 - 是的。 您可以同时拥有多个连接,所有发送和接收;假设你有多个套接字。
您没有提到服务器必须处理的客户端数量,或者您正在对发送/接收的数据执行的操作。 根据您的实现,可能还需要多个线程(正如Dariusz Wawer所指出的,这不是必需的,但我提到它们是因为可以处理大量客户端的可扩展解决方案可能会使用线程)。
查看有关TCP和UDP端口的这篇文章,了解更多信息: TCP and UDP Ports Explained
可在此处找到一个好的示例C#教程:C# Tutorial - Simple Threaded TCP Server
答案 1 :(得分:0)
取决于“同时”的意思。通常答案是“是”,您可以同时进行多个TCP / IP连接和多个UDP套接字的发送和接收。
除非你真的担心延迟 - 几微秒可能会给你带来麻烦。如果是这种情况,一个连接可能会干扰另一个连接。
答案 2 :(得分:0)
您的问题实际上是所有网络应用程序员必须知道和考虑的几个问题的边界。
首先:从网络接收的所有数据都存储在操作系统的内部缓冲区中,等待读取。缓冲区不是无限的,所以如果等待的时间足够长,可能会丢弃一些数据。通常,在那里写入的数据块是单个数据包,但并非总是如此。您永远不能假设在TCP / IP通信中可以读取多少数据。另一方面,在UDP中,您必须始终读取单个数据包,否则数据将丢失。您可以使用recvfrom
读取UDP数据包,我建议使用它。
其次:使用阻止和非阻止方法是您网络应用最重要的决策之一。互联网上有很多相关信息:C- Unix Sockets - Non-blocking read,what is the definition of blocking read vs non- blocking read?或a non-blocking tutorial。
至于线程:线程从不需要来编写多连接处理程序应用程序。有时它们会简化您的代码,有时它们会使它运行得更快。有一些众所周知的编程模式用于使用线程,比如在单独的线程中处理每个单独的连接。通常情况下,特别是对于没有经验的程序员来说,使用线程只会导致奇怪的错误和头痛。
我希望我的帖子能回答你的问题并解决我在另一个答案之下的讨论。