一台设成服务器,hub连接起来。

解决方案 »

  1.   

        最常用的方法是用C/S模型。需要5台机器,一台运行服务器软件,其他运行客户端软件。
        服务器软件创建一个TCP SOCKET,等待客户端连接请求(即加入游戏的申请)。服务器记录下每个连接成功的客户端的相关信息。然后给每个连接成功的客户端分配一个网络ID,并开一个线程,用于与此客户端进行后续的数据通信。
        客户端要创建两个SOCKET。一个是TCP SOCKET,用于向服务器发起连接请求(即申请加入游戏),连接成功后,用此SOCKET与服务器进行通信;另一个是基于UDP的无根方式的多点组播SOCKET,用于各客户端在线交流。
        当有4个客户端加入后,服务器通知每个客户端游戏开始。某个客户端想退出时,向服务器申请,服务器征求其他3个客户端意见,当其他3家有2家以上同意时,则服务器结束游戏。
       你还可以增加其他许多功能,比如当有3家同意将某个客户端剔除时,就可以将此客户端剔除。至于玩什么游戏,则要根据此游戏的规则再定一套高层协议。
      

  2.   

    有没有一种方法使:
    在需要的时候可以将client/server的角色互换?
      

  3.   

    你说的是不是象星际一样,谁建游戏都无所谓,但只要建,就可以连在一块打。
    但实际上,这都是在某个特定的LAN中的,而LAN往往都有一台网络的Server。
    或许我误解你了。
      

  4.   

    对,有点这个意思。但还要有一个总控制的server,其他的机器在server允许的条件下可以随机交流与连接。
    我的概念不是很清楚,在网络架构方面几乎白板,所以请教各位,顺便推荐几本好书,让我垫垫底。多谢!
    有高见的话,一定加分!
      

  5.   

    楼上的caiyi9000(只懂Winsock):
        你说得也太轻巧了,现在有个问题就能把你难倒:
        大家玩CS或者DF的时候都知道:只有获得服务器的地址、端口,一下子就能连上服务器
    玩了。我不管你有没有Socket程序,你的Socket服务端软件只能限制你的客户端软件,这跟
    我的CS和DF是没关系的,也就是说:你的Socket程序不能限制我的CS或者DF登上你的服务器
      

  6.   

    Ra1998(疯狂红警) 
    好像有点道理!只用socket是否太单薄了?
      

  7.   

    to Ra1998(疯狂红警):
        你想要登陆这种游戏服务器软件,是要先注册用户名和密码的。服务器将保存你注册的信息。客户端登陆服务器,除了SOCKET连接,还要进行应用层的握手,即向服务器软件发去自己的用户名和密码,服务器软件在鉴权之后,才认为客户端登陆成功。这个应用层的握手是游戏服务器和客户端之间自己定义的应用层协议,除非你知道这个应用层协议,你就可以自己编客户端软件,向服务器软件注册一个用户名和密码,然后就可以登陆此游戏服务器。
        SOCKET只提供到网络层的连接,而应用层的连接都是自己定义的。不知道你懂不懂网络协议的分层?
        联众不就是这么做的吗?如果你没有注册用户名和密码,你怎么进入加入游戏?如果你不用联众的客户端,你怎么向联众游戏服务器登陆?
      

  8.   

    caiyi9000(只懂Winsock) 
    也有道理!