C# - 2个客户端程序交易变量信息 - 有更好的方法吗?

时间:2011-04-07 23:21:33

标签: c# interprocess

我正在尝试将玩家信息从我的游戏发送到我的网络客户端,然后被发送到服务器。

目前,ClientNetwork - > ClientGame关系与XML文件保持一致。它们以非常高的速度来回读/写。如果您只使用一个XML文件进行此交易,那么有时候会“占用”该文件,当一个人无法读取时会产生一种滞后,因为另一个是恶意编写和重写。

为了解决这个问题,我每个XML文件都有2个。如果它不能读取一个,它将读取另一个。从理论上讲,他们应该同时使用它们,因为它是从一个到另一个的权衡。没达到标准杆。

但我的主要问题只是XML的一般用法非常草率,几十个try-catch语句以确保它们都很开心(而且我个人最喜欢的,尝试抓住尝试捕获 - WE必须深入了解

我很好奇是否有更好的方法可以做到这一点。我需要一个可由两个客户端程序访问的静态变量点。我担心有人会说数据库...

我想对任何正在研究此问题的人说明并偶然发现共享内存非常棒。虽然我必须将所有字符串转换为字符然后转换为字节并逐个读取它们,但总体来说它比处理无法同时读取/写入同一文件的内容要好得多。如果您希望进一步了解它而不是仅仅使用它,请转到this link,它解释了许多消息传递类型以及如何使用它们。

3 个答案:

答案 0 :(得分:6)

是的!

您正在寻找的术语是进程间通信 - 同一台机器上两个进程之间的通信。

有多种方法允许同一台机器上的两个进程相互通信,包括:

  • 命名管道
  • 共享内存
  • 套接字
  • HTTP
幸运的是,C#应用程序可以简单地使用WCF框架来使用上面的一个来执行IPC(进程间通信),并让WCF框架处理困难的部分!以下是一些可以帮助您入门的指南(还有更多):

此外,关于WCF的一个巧妙之处在于,您只需将“传输”(即通信方法)更改为通过网络工作的(例如HTTP),就可以使用它在不同机器之间进行通信。

如果您的目标是.Net 2.0,那么您应该研究.Net远程处理或Web服务。

答案 1 :(得分:0)

一个简单的TCP流向我跳出来。让网络客户端打开一个侦听TCP套接字,并让游戏连接到网络客户端。如果愿意,您可以继续发送您已编写的相同XML数据。

答案 2 :(得分:0)

我同意David提出的tcp / ip socket答案。我只是将数据提交到本地PC上的套接字,让另一个应用程序监听套接字。您可以使用此方法轻松快速地传输数据,无论您要定位的.net框架版本如何,它都可以正常工作。