也欢迎对java技术感兴趣,特别是对swing及网络方面感兴趣的朋友加入,相信随着开发的进行,随之出台的文档及源代码对你将有莫大的帮助。
目前有两人将直接负责代码的开发。
欢迎有兴趣的朋友加入。
任务没有强制分配,开发方式是提出开发问题,有兴趣解决或者有经验的朋友回帖领取任务或者给出原型代码即可。

解决方案 »

  1.   

    请寄一份指令表到:[email protected]
      

  2.   

    以后的开发进度将在http://www.smiling.com.cn/group/homepage.ecgi?group_id=27119公布。不再在csdn说明开发的其它情况。
      

  3.   

    腾讯的移动qq功能很方便,为此我就算开着icq或msn也要顺便把qq开着。免费软件要加入这个功能,可能难度比较大吧,这不是个纯技术问题。我对netmeeting的共享桌面功能很喜欢。
      

  4.   

    这个软件的定位是share还是free?如果能在手机上开发客户端,或许会变得很有趣。
      

  5.   

    软件完全是free的,而且源代码开放。
    开发的目的只是练习java的知识,另外也可以给自己和别人提供一个方便的聊天工具。可以在windows和linux平台下完全一样的使用。
      

  6.   

    已经出台:
    NetCaller的版权及其它说明
    NetCaller的开发方式说明
    NetCaller连接原理
    并对提出的几个问题给出解决方法。
    欢迎加入,欢迎提出意见。
    详细情况请查看
    http://www.smiling.com.cn/group/homepage.ecgi?group_id=27119  NetCaller开发小组
      

  7.   

    to:steeven(steeven)
    能不能说详细一些?你的意思是将信息以xml格式进行传输而后转换为其它格式吗?
      

  8.   

    只是一个简单建议,我也刚刚了解xml :)如果不考虑效率的话, xml会成为一个开放接口, 并且非常方便以后扩充
    xml的扩充能力很强,增加什么功能只要加一个新的字段, 旧版本也不会因此而不兼容如果有人写其它版本的NetCaller也可以根据dtd简单完成.一个开放的接口可以鼓励不同的人分头在不同的系统上用不同语言分别完成客户端和Server另外,icq, oicq都要求有专用server,可否用其它方式来完成一个松散的server组合,并且很容易实现,比如在http上用cgi就能做server. 这样局域网也可以构建一个小系统.松散的server直接可以通过客户端和其它方法来相互了解,分担负载.没仔细看你的计划,胡说几句 :)
      

  9.   

    网上已经有用JAVA实现的类似于QQ的CODE下载了
    可以找来参考一下啊
      

  10.   

    to:steeven(steeven)
    我也仅仅是刚学了一点xml,但是考虑到前期开发的简单,目前没有考虑,如果有xml高手加盟的话,可以考虑消息的xml格式化。
      

  11.   

    to:steeven(steeven)
    目前考虑到前期的开发的简单,没有考虑使用xml,而且我也刚刚学了一点xml,所以如果有xml高手加盟开发小组,可以考虑将消息以xml格式表示。
      

  12.   

    to :yuppy_lew(yuppy_lew)
    能给出具体的地址吗?我这里到是有一个类似的东西,作者叫它jicq,而且也在这个论坛给出了帖子请大家帮他扩充。但是我的考虑和他的有效不同,NetCaller的构思是客户端直接的通讯,不使用服务器。
      

  13.   

    好了,终于说到点子上——不使用服务器。不使用服务器怎样实现你所讲的好像qq那样的功能呢?就是连人家的ip地址也不知道啊,端到端怎样实现?另外,难道你要所有用户都下载一个jdk来用你的软件?再加上java运行慢,你又不是不知道,你准本怎样克服?
      

  14.   

    非常欢迎楼上的尖锐的问题。
    首先声明一下,此系统准备了两套方案,一个是完全没有服务器,另一个是使用服务器,但是服务器的功能仅仅局限于存储使用者的基本信息,各个NetCaller只是从服务器查询好友的ip是否更改了。
    有服务器的方案很容易解决你提出的不知道对方ip的功能,只有查询服务器就可以了。对吗?
    我个人不愿意使用服务器的方案,原因是我不想功能的发挥被局限于服务器的状态和能力。现在的pc的能力已经很强了,该发挥它的能力了!而且这个是一个完全免费的软件,上那儿找一个服务器呢?有商家愿意,他会不增加其它的条件吗?会不增加自己的广告吗?你现在有能力拒绝腾讯的广告吗?
    现在解释一下没有服务器的情况,在开始的时候,这个软件的使用者肯定会在朋友圈里面使用,他们彼此是相互相信的,并且往往使用mail通讯,如果一个问另一个,你在用NetCaller吗?对方回答,我在用啊!告诉我你的ip!!对方会不会告诉他?我想会的。现在我们还会有一些网友,之间也用mail通讯?他们之间呢?他们会不会有可能将自己好友的ip告诉自己的网友呢?如果NetCaller确实像我开始构想的那么好用,大家也承认,那么是否会形成一个社区,并且大家在上面公布自己的ip能?
    这些只是乐观的估计,如果我们做的东西不好,情况就不一样了。:(
    使用这个不用安装jdk吧,需要的仅仅是一个jre或者jvm,这个在当前的操作系统上可能除了windows xp外都带吧?如果经过考察确实需要外部的其它辅助类库,我想在发布NetCaller的发布包里面会加上的。这个有问题吗?
    关于java运行速度慢的问题,我个人的感觉是java程序在启动的时候确实很慢,但是启动后呢?我的感觉是启动后的速度不会比c程序的速度慢多少?不知道你有没有运行过jdk带的那些演示程序,java2d,java3d,swingset2这些在启动的时候很慢,但是启动后呢?我感觉不出来有什么慢?而且效果令人炫目。这也是我之所以想做一个java的NetCaller的原因,其实已经有一个vc做的NetCaller的原型,是我刚到公司的时候练习的项目,所不同的是我们是在局域网里面测试的,而且使用的是udp的方式,而不是java版使用的Socket方式。我想,如果NetCaller好用,你应该会愿意花上1分钟来等它启动完毕,就像在使用JBuilder5时所遇到的情况那样!对吗?
    如果对我的回答有不满意的地方,请指出!谢谢。
      

  15.   

    NetCaller连接原理
    说明:
    连接的建立过程是这样的,假设的情况是同时使用服务器和mail来进行ip地址变更的通知。
    首先:如何获得其它用户的ip?这个在开始时是最难办的,也同时是其它类似软件的共有缺点。oicq在开始用户很少的时候也无法和其它人聊天!如果有服务器,那么通常情况下我们应该假设用户应该愿意和其它人交流而把自己的ip告诉服务器,这样随着用户的增加,可交流的对象也就增多了。如果假设没有服务器,那么我们应该假设的情况是用户使用netcaller的交流对象是自己的同学或者网友或者朋友,它应该知道对方的mail,如果其中一方有一个固定的ip就好办了,只要建立连接是双向的,有固定ip的一端发连接请求给没有固定ip的一端,这通常不能建立连接,但是没有固定ip的一端也同时在发连接请求给有固定ip的那个,这样连接就可以建立并且完成ip变更的通知(在连接建立后首先完成的就是基本信息的交换,包括自己的ip信息),如果都没有固定ip的话就稍微有些麻烦了,还是假设没有服务器,这时通过mail,先启动的一方试图寻找另一方,但是由于对方的ip改变了,这时它通过mail发送自己现在的ip给对方,而且它同时接收mail,看是否有其它好友发来的ip地址变更mail通知,有则提取ip信息,并根据新ip试图建立连接。假设它发送自己的ip变更通知给好友后,提取好友给它的ip变更通知没有结果,那么它只能等待,就像oicq中所有的好友都不在线的情况一样。假设十分钟后,一个好友打开了netCaller,它根据对方原来的ip试图连接但是连接不上,它首先提取mail,发现了对方发来的mail(一般mail可以在发出几分钟甚至一分钟内到达对方的mail服务器),它提取对方新的ip,并建立连接。这样实际上在建立连接上是可行的。启动后试图建立连接的流程
     
    没有服务器的方案:
    1. 启动netcaller
    2. 在本机上建立一个ServerSocket线程,可以监听别人的连接请求
    3. 连接mail服务器,连接不成功则直接进入下一步,成功则查找是否有ip地址变更邮件(规定特殊的格式,例如在标题中以:netcaller:nickname:ip:mail:mailpasswd为格式,以区别其它普通邮件),有则从mail服务器上读出邮件中的信息并删除服务器上的该邮件并更新对应好友的ip信息
    4. 根据好友名单中的ip信息,为每个好友建立一个Socket连接请求线程,每个线程的任务是:如果连接建立成功,线程结束,如果不成功,判断是否成功连接了邮件服务器(由上面一步的一个boolean变量表示),没有成功连接则每隔一定时间(时间长短可以设置,但有一个下限,例如3分钟)重新进行一次连接请求,直到连接成功或者收到ServerSocket线程的连接成功通知,然后结束此线程(或者不循环请求连接而直接结束此线程,因为在双方都没有固定ip而邮件服务器又不能连接的情况下此举毫无用处,但是在不能连接邮件服务器,而对方有固定ip自己没有固定ip的情况下此举是有意义的,可以成功建立连接,或者可以考虑更复杂的方案,对方可以设置自己的ip的属性是固定还是动态的,若是固定的则循环请求,否则直接结束,我比较倾向这个设计);成功连接邮件服务器则比较自己现在的ip和自己上次启动时的ip是否相同,不同则向该好友发送一个自己的ip地址变更通知,然后循环请求连接直到连接成功或者收到ServerSocket线程的连接成功通知,然后结束此线程(此处的设计和上面的类似,可以直接结束,但是在对方有固定ip,但是暂时不能连接邮件服务器,而自己没有固定ip时可以发挥作用,复杂设计和上面的一样)。
     
    此方案的连接成功情况是:
    双方都有固定ip:一定可以成功连接,没有其它外部服务器依赖。
    一方有,一方没有固定ip:
    分几种情况:
    没有固定ip的一方的邮件服务器不能用时使用复杂设计可以成功,使用简单设计不一定能成功。但是复杂设计的性能稍稍低一些,可以忽略不计。
    有固定ip一方不能连接邮件服务器,使用复杂设计可以连接成功,简单设计不能。性能考虑同上。
    都能连接邮件服务器的情况下一定成功连接,两个方案都可以。
    双方都没有固定ip:
    有一方不能连接邮件服务器则不能连接,否则可以连接,即使使用简单设计。但是如果一方的邮件服务器只是暂时不能用,而如果在邮件服务器不能用时定时重新请求,则是可以建立连接的。
     
    有服务器(仅仅是信息存储服务器)的方案:
    1. 启动netcaller
    2. 在本机上建立一个ServerSocket线程,可以监听别人的连接请求
    3. 连接服务器,连接不成功则直接进入步骤5,成功则比较自己的ip地址和服务器上的信息是否相同,不同则根据设置决定是否发送自己的ip地址变更信息
    4. 向服务器发送查询请求,查找好友名单中的ip信息是否变化,变化则提取新信息
    5. 连接mail服务器,连接不成功则直接进入下一步,成功则查找是否有ip地址变更邮件(规定特殊的格式,例如在标题中以:netcaller:nickname:ip:mail:mailpasswd为格式,以区别其它普通邮件),有则从mail服务器上读出邮件中的信息并删除服务器上的该邮件并查看是否有从服务器得到的ip新信息,有则根据信息的发送时间决定使用哪个信息更新本机数据(由于对方可以不向服务器提交信息而直接通过邮件仅仅向好友提交信息,所以邮件中的信息可能比服务器上的信息新)
    6. 根据好友名单中的ip信息,为每个好友建立一个Socket连接请求线程,每个线程的任务是:如果连接建立成功,线程结束,如果不成功,判断是否成功连接了邮件服务器(由上面一步的一个boolean变量表示),没有成功连接则每隔一定时间(时间长短可以设置,但有一个下限,例如3分钟)重新进行一次连接请求,直到连接成功或者收到ServerSocket线程的连接成功通知,然后结束此线程(或者不循环请求连接而直接结束此线程,因为在双方都没有固定ip而邮件服务器又不能连接的情况下此举毫无用处,但是在不能连接邮件服务器,而对方有固定ip自己没有固定ip的情况下此举是有意义的,可以成功建立连接,或者可以考虑更复杂的方案,对方可以设置自己的ip的属性是固定还是动态的,若是固定的则循环请求,否则直接结束,我比较倾向这个设计);成功连接邮件服务器则比较自己现在的ip和自己上次启动时的ip是否相同,不同则向该好友发送一个自己的ip地址变更通知,然后循环请求连接直到连接成功或者收到ServerSocket线程的连接成功通知,然后结束此线程(此处的设计和上面的类似,可以直接结束,但是在对方有固定ip,但是暂时不能连接邮件服务器,而自己没有固定ip时可以发挥作用,复杂设计和上面的一样)。
     
    此方案的连接成功情况是(假设服务器可用,不可用时的情况和没有服务器时上面的方案完全一样):
    只要服务器可用,而对方的信息是新的就可以建立连接。只需要使用简单方案。如果考虑去掉用户自由决定是否向服务器提交信息而自动直接提交最新信息时可以保证连接的成功性,但是此举使用户失去一定的自由度,值得商讨。
      

  16.   

    假设这儿是我的邮箱,你是2001-11-4 18:37:24给我寄来了你的ip地址,而我是现在才看到你的ip地址,你要我现在用此ip地址跟你聊吗?你在吗?如果你是拨号上网的,ip是不定的,即使你在,我也未必能找到你。
    而如果有服务器的话,一切都好了。但在做一个类似qq、oicq的东西确实有意义吗?
      

  17.   

    哈哈,没有中心节点是不可能成功的,你以为P2p的东东是真的实现了点对点吗?没有一个地址服务器他能?????????????
    哈哈哈哈哈哈!!!!!!!还有你当大家都有固定ip的啊
      

  18.   

    to chliang() :
    看来你没有仔细的看连接说明,或者说没有领会我说的意思。
    通过邮件是这样连接的:
    假设你有一个邮箱,而且已经在我的好友名单里面。你在今天的上午12点打开了NetCaller,而且你的ip是不定的,假设你是拨号用户,由于你现在的ip变化了,所以你给我发了一个ip地址变更的邮件(包括你的好友名单中的所有人),你一直开着你的NetCaller,而我刚好在12:30也打开了NetCaller,我先接收邮件,发现了你给我的邮件,我提取你的新ip,并且根据这个ip和你建立连接,你说我可以和你建立连接吗?如果我来晚了,你在12:20就关闭了NetCaller,我也收到了你的邮件,但是这时不能和你建立连接,因为你已经不在了。但是因为你不在网络上(NetCaller网络),即使你和我用的是都是oicq我们也一样不能聊天啊!(你在我用oicq之前关闭了oicq)。
      

  19.   

    to ecool(扫地的癞蛤蟆):
    如果大家都有固定的ip就用不着oicq了。早就有更好的东东了。:)
      

  20.   

    呵呵
    你这个创意和国外现在火的P TO P是一样的(我感觉)
    要是真是这样的话,技术难度是非常高的
    我在程序员杂志上见过这方面的文章。你去查查吧!