客户可以发送密码和用户名和其他信息如网卡mac address给server,如果成功返回一个唯一标志字W给客户C,使W和mac address,以及登陆次数联系起来,就算被其他人取了也不能用.
2) 如果由于通讯问题,客户端C来不及从服务器上Logout,服务器如何注销该客户的安全字W?是否必须要做用户级的KeepLiving
可以让客户定时登陆一次(比如1分钟),如果有3次客户没有登陆,可以视为logout

解决方案 »

  1.   

    问问你是指在Windows系统中做还是指基于WINSOCK的联结的服务。
      

  2.   

    To: masterz做KeepLiving是否会对服务器的性能造成影响?
    另外其他通讯软件是否也使用这中机制,有没有更好的?
      

  3.   

       我觉得你这样,根本就不能实现安全行。大家知道Sniff ,伪造IP包技术等。
       我觉得在传输过程中要对数据(包括命令)进行加密(比如RSA),其实其他机器得到你的IP报也无法得知你的数据。
       2) 如果C在一段时间还没有连接到S,则S就断开C。比如大家熟悉的FTP服务器,如果你在一定时间没有操作,FTP服务器就会断开联机。FTP客户断为了保持不被断开,就要每个一定时间发送NOOP命令。
        
      

  4.   

    是从服务器发送KeepLiving信息好,还是从客户端(我觉得从服务器发送更好,因为可以根据服务器通讯负荷动态调整发送的频率)
      

  5.   

    我觉得最好的办法是用3DES来加密,比如象金融系统的ISO8583协议加密方式.
    客户首先签到,服务器记录次客户签到,得到客户标识和流水号零标志.
    客户把客户的标识和包流水号用3DES加密作为包头发送到服务器,服务器解包检验合法性,这样如果有相同的包到服务器,服务器可以丢弃掉此包.
    客户签退.
    所以要想自制客户标识和包流水必须解密,但3DES应该来说是不可逆的,复制包的话服务端会丢弃包,所以一定程度能保持安全性.
    缺点是冗余量有点大.
      

  6.   

    There are two problems with keepalives:Only Windows 2000 allows you to change the keepalive time on a per-process basis. On older versions of Windows, changing the keepalive time changes it for all applications on the machine that use keepalives. (Changing the keepalive time is almost a necessity since the default is 2 hours.) Each keepalive packet is 40 bytes of more-or-less useless data, and there's one sent each direction as long as the connection remains valid. Contrast this with a command/response type of protocol, where there is effectively no useless data: all packets are meaningful. In fairness, however, TCP keepalives are less wasteful on Windows 2000 than the "are you still there" strategy above. 
      

  7.   

    这是WinSocket的KeepLiving设置,我是指的自己设置的KeepLiving.
      

  8.   

    多谢各位的参与,还有一个问题:3DES的速度如何?是否可满足通讯的需要?