c# – 网络客户端 – 服务器应用程序建议

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

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

基本上,这涉及:

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

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

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

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

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

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

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

解决方法

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

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

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

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...