本人想做一个带服务器的qq。以前做过一个,但是只能局域网内使用。
我已经思考了几天,但也没个头绪。希望哪位高手能指点一二,帮我拟个步骤什么的。让我有个方向,能找到使力的方向。
还请各位提携!谢谢!!!

解决方案 »

  1.   

    1、最好自己开一个Internet服务器,然后自己编一个服务程序放在服务器运行。客户A连接到服务器向服务器获取在线信息
    然后客户B也连接到服务器向服务器获取在线信息
    服务器向客户A发送新的在线信息
    客户A得知客户B在线
    客户A发送信息到服务器,然后服务器转送信息的客户B这样客户端不论在什么网络条件下,只要能连接上Internet就能相互通信。2、申请一个支持ASP的网站,然后通过ASP访问数据库来中转数据客户A向ASP提交代客户B浏览权限数据
    客户B定时从ASP页提取属于自己的信息
      

  2.   

    supermanking你能在说的详细一点吗?
      

  3.   

    我目前也在研究这个,做课题设计的,大概结构有一点,不过具体实现还很麻烦,我搞到了QQ老版本的通信协议,我觉得还不错。可以借鉴借鉴,你要的话联系我: [email protected] ,也许我们可以共同研究哦。
      

  4.   

    我说得已经可以看懂了吧,就是说做一个Internet的中转服务程序
    将其他的客户端用TCP/IP协议连接到那个中转服务器,然后把要发
    送的信息发送给服务器,由服务器再转发给目标用户,比如:         服务器
            /     \
           /       \
          /         \
       用户A       用户B其实“用户A”和“用户B”不是直接相连的,但他们有一个共同连接
    着的对象“服务器”,如果“用户A”想发送信息给“用户B”,那么
    “用户A”可以不用与“用户B”再进行连接,只需要把信息发送给
    “服务器”,然后让“服务器”转把信息发给“用户B”就可以了。这样做的做法对服务器的网络要求比较高,不能是通过代理或路游上网
    的电脑,最好能在其他网络(如:铁通、长城宽带...)都能通过你上网
    的IP访问得到你的电脑,最好有固定的IP地址。我用的是铁通宽带,虽然我也可以通过虚拟拨号上网,好像也分配了Internet
    的动态IP,但是我在自己机子看见的IP和到网上看见的IP竟然不一样,
    我试过到网吧去访问我的IIS服务,两个IP都用了都找不到我机子上
    的网页信息,这说明我的可能是通过路游上网的。所以我的网络不能
    作为服务程序使用,你在网络考虑时要注意这一点。如果你是通过动态IP作为你服务器的IP地址,建议你先申请一个ASP+ACCESS
    的网络空间,自己写一个ASP程序用作存储和读取数据所用,然后你在服务器
    写一个更新服务器IP的程序,每次上网时将你服务器当前的IP地址提交到ASP
    程序里进行保存。在客户端启动时你可以先读取ASP返回的服务器地址,然后
    在通过这个IP地址与服务器连接就可以了。这样做的目的很明确,是为了解决动态IP问题。因为现在IP是很有限的,
    很多单位都不能申请固定IP了,所以不一定有这个条件开这样的服务器。
    但用其他网站的固定URL来获取服务器信息是完全可行的。当然,现在还有些域名服务软件,比如 花生壳2.0 就是一个不错的解决
    方法,但是要通过 花生壳 访问其他端口好像要收费。
      

  5.   

    infact, tcp协议服务器中转的方法太耗费服务器带宽如果是放出来很多人用的那就很不现实,什么聊天数据都通过服务器。更好的方法是UDP。不过UDP是不能两个内网的互相通讯,那就要用到NAT了~要是内网不是透明代理,那只能用proxy进行tcp的连接了。
      

  6.   

    楼上的那位兄弟,点对点能进行通讯固然好,如果可以通过UDP进行通讯那么用 TCP不
    更安全些吗?所以我认为用UDP没有必要,特别是在网络环境不定的情况下,比如两台
    客户机都是通过几层代理上网的情况呢?比如你是用小区的宽带,家里有三台电脑,
    你是通过家里的路游器代理上网,我的条件和你差不多,你能实现这样的协议直接相连
    吗?如果中间没有一个服务器该怎么实现两台电脑的通讯呢?但是,用我上面所说的方法完全可以实现,当然会对服务器造成一定的负担,所以不一
    定要所有的用户都以这种方式相互通讯,可以在用户登陆时将客户的网络环境一起写到
    服务器,当客户A想和客户B通讯时,现判断自己的网络环境和对方的网络环境,可不可
    以直接相连,如果可以就不用通过服务器转发了,这样也可以减轻服务器的负担。但是
    这也是如何减轻服务器负担的问题。要是按你的说法,就算是有一台服务器,也就是提
    供用户是否在线、用户IP地址等信息,用一台586都可以做到了吧。要是这样,我家里有
    两台586,三台赛扬,一台毒龙,不就可以开好多服务器了。
      

  7.   

    我觉得delphi不错。。有分布式解决的组建。。vb没有!!
      

  8.   

    提问的兄弟,你可不可以公布一下你研究的东东?
    我自己设计的协议像这样: 标志字段+包大小+(操作类型+用户帐号+消息...)。但是问题多多,如果用 Byte Array 来表示,用vb做好像很困难,因为服务器程序做的最多的事情就是分析包,然后根据操作类型决定何种操作,好像效率不高啊。有经验的朋友请赐教。
      

  9.   

    to supermanking
    >所以我认为用UDP没有必要,特别是在网络环境不定的情况下,比如两台
    >客户机都是通过几层代理上网的情况呢?比如你是用小区的宽带,家里有三台电脑,
    >你是通过家里的路游器代理上网,我的条件和你差不多,你能实现这样的协议直接相连
    >吗?如果中间没有一个服务器该怎么实现两台电脑的通讯呢?so,我说了对于不能透明nat的网络tcp代理还是很重要的.如果楼主只是开发一个给一小撮人聊天的小玩具,tcp当然没问题.要是用户多,再想做点附加功能传文件什么的,那肯定是no door.
    >我想一台服务器在带宽允许的情况下因该可以服务一两万人吧。
    >如果客户量较多,可以考虑多台应用服务器,就QQ来说也不只是一台服务器呀。
    1,2w人似乎估计过于乐观了.还有关于安全这个问题,不知你是担心哪个方面不安全呢?要是都是明文传送,udp跟tcp好像在安全方面没什么区别吧.再说,不是tcp连接了就代表对方是可靠的客户端,别忘了还有外挂这玩意...
      

  10.   

    to Garfield(猫仔|学VC少抢分..) 
    >要是用户多,再想做点附加功能传文件什么的,那肯定是no door.难道Mail服务器不能上传文件和下载文件吗?也不就是一个中转站而已
    难道只是换了个协议及通讯方法就用不了了?呵呵>1,2w人似乎估计过于乐观了.你认为我说的服务器是一两千的PC和每月几十块的ADSL吗?别忘了
    还有些东西叫“服务器”。我还说过“在带宽允许的情况下...”难道
    你认为没有机器能做到吗?“一两万”,我还是用保守的说法呢。>不知你是担心哪个方面不安全呢你没听说过UDP是不安全协议吗?对方都不一定能收到你的信息。
    最起码我碰见过在同样的三四十台机的网络中用TCP连接可以准确的收
    到信息,而用UDP却经常收不到信息,有时要发三四次才能收到。有一
    次就在5台机的网络中也出现过这样的问题,测试软件很简单,绝对不
    用担心我代码上的问题,是专门测试而开发的。但确实存在能否安全
    通讯的问题。
      

  11.   

    呵呵,你们不要在这里争辩 UDP 还是 TCP 的问题了哈,我们讨论的不是重点。我自己的意见:用UDP或者TCP都可以,UDP虽然不保证数据的正确传输,但是做程序的时候可以解决阿,比如服务器收到数据就应答,客户端如果在指定的时间内收不到回应就认为没有数据没有传送成功;至于TCP嘛,建立连接的不一定是经过认证的,但是可以验证自定义的数据标志阿,如果几次都不正确就可以认为非法了阿。
      

  12.   

    1.能,不过你说kugoo, emule,哪一个用服务器中转?受得了吗?不知道你的服务器带宽是以多少KG算的。2.不知道你的“服务器”是什么服务器,如果是网游服务器,上k人已经非常卡了。1,2w?都不知道客户端能不能忍受。不要为了夸大,凸显其数量而不管质量。3.不一定收到代表不安全吗?只能叫做不可靠。楼上说的就对了,发送数据对方要回应。
      

  13.   

    to Garfield(猫仔|学VC少抢分..) 
    ====================================================================
    从聊天的角度来说:
    以打字速度为每分钟120个字的水平打字,每秒2个字4个字节一般通讯的文字发
    送平均为20子以下。也就是说平均每个用户在20秒才发80个字节的信息,平均每用户每秒发4个字节
    (还不算读信息或其他的时间)以10Mbit的带宽计算,每秒通讯字节数为 (10*1024*1024)/8=1310720字节
    同时通讯的用户数也就是 带宽字节/用户通讯字节  就是1310720/4=327680
    而且在实际情况下能每分钟打120个字的人少得很,我最快就是三十多个字。
    而且我就算QQ在线也不一定聊天。这个数字还可以再加呢,呵呵。当然,实际的坑定达不到三十多万,就算可以有三十多万用户服务器也受不了。
    但计算再怎么不精确也不会一两万都做不到吧,我认为在扩展些不是很占带宽的
    功能都还是可以的。还有10M只是一些网吧的带宽还不是专业的网站带宽,这能
    算夸大吗?我都不知道你说的KG是怎么算出来的,呵呵。再说了,我还建议在客户和客户之间能自己建立连接的情况下尽量连接,可以
    减少服务器的负担,再这种情况下我还算是夸大和不管质量吗?信息的回应是必要的,不论你是用TCP 还是UDP我认为都是必要的,我也没说不
    要这样做呀,最起码我一直都是这样做的,不可能每一步都要说出来吧。但是,
    你说的UDP不是不安全只是不可靠有什么意义吗?既然你都认为UDP协议属于你说
    的“不可靠”我说他是“不安全”又有何不可。对于很多人和事来说,“不可靠”
    就是“不安全”。唉~~~~~~
      

  14.   

    1.好了,说着文件传送中转你又说回聊天字符的中转.我真不知道怎样跟你算,您似乎没看前面我们在讨论的是什么?2.客户端如果双双在不同局域网内怎样tcp直连?现在我所知道的,要是能NAT的局域网,至少两边都能用UDP端口映射,互相直接发数据.不知道在同样网络情况下TCP是怎样做到直连的?又要中转?这样又扼杀了节约服务器资源的机会.这就是UDP的优势.3.QQ用udp通讯已经是个成功的例子了,我不觉得存在严重的消息丢失现象,再说kugoo用udp传送文件,要是丢包严重文件还能传送完整?你说你经常收不到数据,是不是您编的程序有点问题呢?UDP要是连基本的都做不到,就枉存于世上了.总结一下:qq两种协议都有用。但是请做一下试验:两个互相能NAT的局域网用户使用QQ对传文件,你可以看到上面会写着"UDP直连"(这证明了第二条)。要是两方都使用了代理(限制为tcp的代理),那除非有一端是QQ会员,否则会传送失败。传送用的是TCP中转,通过腾讯的服务器,使用了Tencent服务器的带宽,所以在非迫不得已的情况而且收了会员费的情况下,Tencent才会使用这一招,正是由于它使用服务器资源难以应付大量使用的场合。UDP是qq的一个主要的协议,大多数场合都会使用UDP传送数据,TCP用于让需要代理的局域网也能上QQ,不过它能提供的免费功能仅仅是聊天,至于视频、传送文件这类需要数据中转的服务必须是会员才行,要为使用的额外的服务器资源付费!QQ原理我想你应该知道,我一开始的想法就是与QQ原理一样的,合理使用协议,最佳优化资源实现功能。最后跟楼主说一下,既然你想用vb写必定规模有限,就用tcp好了。我就不再关注此贴了。到此为止。
      

  15.   

    ZXMessengerXM曾经有人开过这源...呵呵,ACCESS数据库版的.做得挺不错!我没有怎么看这源码....(因为我还用不上)所以,不知道内容如何!
      

  16.   

    其实有一个东西是证据,就是现在的QQ和POPO的传输机制。你不得不考虑大量用户在线的情况,更必须考虑用户的复杂环境。我觉得,使用UDP实现全部传输的原因多半是为了对付网络的复杂环境。虽然要通过网关,但目前所能找到的大部分代理程序,都支持SOCKS5,而SOCKS5是通过UDP的最好选择。
    你可以看一下现在的QQ的音频视频通讯,都是使用UDP建立连接,这样就使更多的网络用户能够进行视频连接。
    还有一个问题,服务器的作用问题,其实QQ服务器只是提供注册、登录、存取等服务的,用户在线时,没必要与服务器保持连接,并且最重要的是要实现用户之间的交换与连接,因而考虑服务器时,要注意服务速度,而不太在意在线用户量。考虑用户之间的复杂环境和复杂的通讯要求,来决定是使用什么方式来实现用户间通讯。