2011-02-14 152 views
0

之間的通信只是爲了澄清某些問題。(聊天)服務器和客戶端

假設我正在製作聊天應用程序。大多數在線教程都是以字符串形式直接發送聊天消息的基本服務器客戶端程序。

那麼,如果有人上線或離線,該怎麼辦?客戶如何通知服務器這種變化?我想出的是使用{在線}用戶,{離線}用戶,{私人} blabla標誌。

如果有人知道你的代碼和那將允許他們通過繼續發送{online} blabla破壞,該怎麼辦? 這會起作用,但也有一些我可以想到的缺陷。什麼是正確或更好的方式來做到這一點?

有人能指出我正確的方向嗎?謝謝。

或者另一個例子,在遊戲中。要讓設備向右移動,它是否會將字符串發送回服務器{unit} {right right}?沿着這些線的東西。


我有點得到如何使聊天服務器的邏輯。如果我只是給文本框添加一個「{chat}」。只要我閱讀這個命令「{chat}」,我就會忽略隨之而來的任何命令。

在RTS中如何(不是我要做一個,只是好奇),你的意思是說有50個字符串,告訴單位如何移動,攻擊,造成傷害,行動等?所有這些命令是在一個線程上完成的嗎?或多線程?

回答

0

那麼你必須執行會話處理和發送sessionToken與您的命令移動單位在遊戲中。因此,服務器將能夠檢查指向的用戶是否有權訂購指向的單元等。與聊天相同的事情。

在我的聊天中,每個客戶端每兩分鐘向服務器發送一些PING消息。因此,如果5分鐘過去並且沒有收到PING,服務器會將用戶計爲[離線]。

如果你害怕誰逆向工程您的客戶端,可以使嚴重的麻煩與作弊系統欺騙用戶,你必須做兩件事情:

  1. 使服務器,以檢查是否給出 用戶訂單有效
  2. 實現機器人檢測。檢查 使用者與一些 恆定的時間間隔的一些行動,或者如果用戶 以文字的一些有限的量 聊天等

我希望這篇文章至少給你一些點。

服務器邏輯的例子如下:

[WebMethod] 
    string LoginUser(string login, string pwd) 
     { 
      if(dal.IsCorrectUser(login,pwd)) 
      { 
       string token = dal.MakeSession(login); 
       return string; 
      } 

      return "-1"; 
     } 

[WebMethod] 
    bool UserOrder(string token, string order) 
     { 
      if(!dal.SessionExist(token)) 
      { 
       return false; 
      } 

      int userId = dal.GetUserBySession(token); 
      if(! dal.ValidOrderForUser(userId,order)) 
      { 
       dal.RegisterWrongOrder(userid,order); // For cheaters-detecting purposes 
       return false; 
      } 

      return dal.ExecuteUserOrder(userId, order); 
     } 

事實上可以發送字符串或任何可序列化的對象作爲一個用戶訂單。

[Serializable] 
struct UserOrder 
{ 
    int unitId; 
    int Order; 
} 

所有樣本都是針對c#的。只是爲了演示邏輯。

+0

忽略所有權利和東西。所以基本上這個想法真的像我說過的那樣,通過使用帶有命令的字符串?任何簡單的例子? 「讓服務器檢查給定的用戶訂單是否有效」,您可以使用我提供的在線示例。 – user607455 2011-02-14 07:32:10

相關問題