网络客户端 - 服务器应用程序建议

nf3*_*743 6 c# networking tcp

我正在尝试设计一个应用程序,允许网络上的两个用户玩囚犯

困境游戏(http://en.wikipedia.org/wiki/Prisoner%27s_dilemma).

基本上,这涉及:

  • 比赛开始(第1轮).
  • 玩家1选择合作或背叛.
  • 玩家2选择合作或背叛.
  • 然后显示彼此的决定
  • 第2轮开始
  • 等等.

我做了一些思考和搜索,我认为应用程序应该包含以下内容:

  • 接受传入tcp/ip连接的服务器类
  • 贵客户(单独计划)
  • 对于每个连接(最多2个),服务器将创建一个新的ConnectedClient类.该课程将包含两个玩家的机器/身份的详细信息.
  • Server类和ConnectedClient类将连接/订阅每个事件,以便当服务器指令准备好传输给玩家或玩家将其输入传输到服务器时,它们可以相互警告.

我不确定最好的approch是使用单个线程来做或工作,还是让它多线程.单线程显然会更容易,但我不确定是否可能出现这种情况 - 我从未在需要TCP/IP连接之前创建应用程序,而且我不确定您是否可以侦听两个传入连接一个线程.

我在网上找到了以下指南,但似乎它在两个线程上打开了两个客户端,它们直接相互通信 - 绕过服务器(我需要控制游戏逻辑):http:// www. codeproject.com/Articles/429144/Simple-Instant-Messenger-with-SSL-Encryption-in-Cs

我非常感兴趣,并且对如何实现应用程序(主要是服务器类)的任何建议表示感谢.

我希望我已经清楚地解释了我的意图.提前致谢.

Max*_*lev 8

我的第一个建议是忘记TCP/IP和套接字.你绝对可以用这个技术堆栈来做到这一点,但是你也会在实现你想要的所有东西时遇到很多麻烦.原因是这类任务的技术水平太低.我会选择tcp/ip和socket作为学术兴趣,或者如果我需要对通信进行巨大的控制,或者我有非常高的性能要求.

所以,我的第二个建议是看WCF技术.如果你之前没有使用它,请不要害怕.这并不困难.如果你准备好为你的应用程序使用套接字,你可以肯定地处理WCF.对于您的任务,您可以使用任何WCF教程从头开始创建1-2小时的基本通信.

所以,我会创建一个服务器WCF服务,它将包含一些包含业务逻辑的API函数.它可以托管在Windows服务,IIS或控制台应用程序中.并且您的客户端将使用该WCF服务,从项目中的另一个本地类调用它们的函数.WCF也可以帮助你做你想要的事件(虽然这是一个更高级的主题).你甚至可以忘记这里的线程,大多数事情都是开箱即用的.