2011-02-14 151 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

相关问题