2011-04-07 20 views
3

我正在嘗試從我的遊戲向我的網絡客戶端發送玩家信息,然後發送到服務器。C# - 2個交易變量信息的客戶端程序 - 有沒有更好的方法?

當前客戶端網絡 - >客戶端遊戲關係保存在XML文件中。他們以非常高的速度來回讀寫。如果您僅使用一個XML文件進行此交易,則有時會「搶佔」該文件,當一個人無法閱讀時會產生一種滯後,因爲另一個人正在惡意編寫和重寫。

要解決這個問題,我有每個我的XML文件2。如果它不能讀一個,它會讀取另一個。理論上他們應該使用他們兩個,因爲這是一個權衡。沒有達到標準。

但是我的主要問題只是XML的用法很sl,,幾十條try-catch語句以確保它們都很開心(以及我個人最喜歡的,嘗試捕獲內部的嘗試 - 我們有TO GO DEEPER

我只是好奇,是否有更好的方法來做到這一點。我需要一個可以由客戶端程序訪問的靜態變量點。恐怕有人會說數據庫...

我想聲明的人誰是尋找到這個問題,以及和整個這個頁面共享內存是真棒跌跌撞撞。雖然我必須將所有字符串轉換爲字符,然後逐個轉換爲字節,但總體而言,它比處理無法同時讀取/寫入同一文件的東西更好。如果您希望進一步瞭解它,而不僅僅是使用它,請參閱this link,它解釋了許多消息傳遞品種以及如何使用它們。

回答

6

是的,有!

您正在尋找的術語是進程間通信 - 在同一臺機器上的兩個進程之間的通信。

有各種不同的方法,其允許在同一臺機器上的兩個過程彼此進行通信,其中包括:

  • 命名管道
  • 共享存儲器
  • 套接字
  • HTTP

幸運的是,C#應用程序可以簡單地使用WCF框架來執行IPC(進程間通信)以上之一,並讓WCF框架照顧困難的一點!這裏有讓你開始一些輔助線(還有更多):

而且,關於WCF的巧妙的事情之一是,你還可以用它只需通過將「傳輸」(即通信方法)更改爲在網絡上工作的通信方法(例如HTTP),即可在不同的機器之間進行通信。

如果您的目標是.Net 2.0,那麼您應該考慮.net遠程處理或Web服務。

+0

點上。也看看命名管道。 – 2011-04-07 23:26:55

+0

或.NET內存映射文件4 – jeffora 2011-04-07 23:32:16

+0

試圖谷歌我的方式在這些名稱下的解決方案。 – Remm 2011-04-07 23:33:37

0

一個簡單的TCP流跳出我。讓網絡客戶端打開一個偵聽的TCP套接字,並讓遊戲連接到網絡客戶端。如果你願意,你可以繼續發送你已經寫過的相同的XML數據。

+0

隱約肯定這是Lidgren.Net的工作方式,我們只是說我的項目不喜歡連接任何東西,因此這整個2可執行的東西是一個巨大的解決方法。 – Remm 2011-04-07 23:34:17

0

我同意大衛提出的TCP/IP套接字的答案。我只需將數據提交到本地pc上的套接字,並讓其他應用程序監聽套接字。您可以使用此方法輕鬆快捷地傳輸數據,無論您的目標版本爲.net框架,它都能正常工作。

相關問題