c# - 异步/同步和 TCP 或 UDP

标签 c# sockets

我对 C# 中的同步和异步套接字非常困惑,我想在 LAN 网络上开发一款游戏,但我不知道哪一个更适合我的应用程序 Hangman 游戏。

此游戏可以以 1 人模式或 2 人模式进行。

在单人模式下,只有一名玩家与服务器交互

但是 2 名玩家模式 2 名玩家轮流与服务器交互。这意味着如果玩家 A 猜错了单词,他就会失去本轮,而玩家 B 会轮到他。

您能给我关于同步和异步的建议吗?

除此之外,如果客户端不需要输入服务器IP,客户端如何找到服务器?这意味着我应该在 TCP 和 UDP 之间选择什么

最后一个问题是我可以创建一个异步服务器但客户端是同步的,可以吗?

非常感谢

最佳答案

选择异步与同步的重要部分是如何使通信与 GUI 线程交互。不要让同步套接字阻塞您的 UI。我看到这里的文章给出了预期的结果,并提供了有关在 Windows 编程中使用异步的一些指导。 Winsock tips

关于 TCP/UDP 的第二个问题,您应该意识到两者之间有很多区别。首先也是最重要的,TCP 将在连接有效时保证数据包的传送。鉴于您的情况和简单的要求并缺乏性能需求。 TCP 可能是您的最佳选择。如果您正在设计一款高性能游戏,必须允许丢包并更好地处理延迟,那么 UDP 会成为更好的选择,但您必须考虑丢包和乱序数据包等情况时会发生什么情况。 TCP 向您隐藏了所有这些复杂性,并使使用它变得更加简单。

混契约(Contract)步和异步客户端/服务器应该不会导致问题。他们只知道通信链路本身(TCP/UDP)。

关于c# - 异步/同步和 TCP 或 UDP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9248897/

相关文章:

sockets - Rust 非阻塞 openssl 流

PHP 套接字 GET 请求

c# - 垃圾收集器不会收集使用创建的对象

c# - 调整放置在 byte[] 数组中的图像的大小

c# - 无法并行启动标记为 MainLauncher 的 Activity

c# - 将虚拟列添加到强类型数据集

c# - 如何在 MVC 调用返回模型之前显示加载图像?

c - 如何创建一个 TCP 服务器-客户端程序,将 200 个 tcp 流从源发送到目的地?

Java 套接字错误 : Reading Strings from Socket's InputStream

c - 服务器接受许多客户端