我现在想明白的问题:
    1.服务器将客户端列表存储在什么中比较好!hashtable?array?other?
    2.我找了几个DEMO程序,服务器端读数据都是通过循环检测看是否有数据发送过来?能不能向DELPHI中一样,注册个事件,当底层SOCKET接收到数据包之后,自动触发接收数据的时间。
    3.一般的网络通讯程序之间的数据传输都是以字节流的方式传递的,能不能直接传输字符串,这样会不会出现JAVA和DELPHI中的数据类型不统一的问题?因为以字节流的方式传输,写通信协议的时候比较麻烦。
    4.有经验的大哥,介绍一下JAVA的NIO包!
    5.最后请大家说说用JAVA做网络通信的时候,应该注意那些细节?讲讲大家的经验!
    6.最好介绍一些比较成熟的开源项目的框架!

解决方案 »

  1.   

    1.服务器将客户端列表存储在什么中比较好!?other?
    服务器端需要用到持久层技术,hashtable?array这些都有容量的限制。
       2.我找了几个DEMO程序,服务器端读数据都是通过循环检测看是否有数据发送过来?能不能向DELPHI中一样,注册个事件,当底层SOCKET接收到数据包之后,自动触发接收数据的时间。
    你用socket等于自己放弃j2ee架构了。建议用http协议。速度方面不用担心。这样server可以用servlet与客户端通讯。然后你第3个问题也解决了。然后你的第6个问题就有很多选择了
      

  2.   

    TO AllError(错误大全):
       首先谢谢你的意见,我有几个问题需要与你讨论!
       1.你所说的持久层技术能不能具体给我解释一下,刚学这个东东。
       2.我需要实现类似聊天室的功能,服务器收到数据包之后需要将数据转发到客户端。这个用HTTP协议不行吧?麻烦解释一下。
      

  3.   

    不要这样嘛!大哥们!
        你们就在网上找点资料给我贴点吧!尤其是JAVA.NIO包的资料!:)
      

  4.   

    知道:webservices吗,不也是用http+xml实现的嘛.有什么实现不了的.
    持久层嘛就是象ejb或hiberate之类的东东.
      

  5.   

    webservices,知道,而且有名的Jabble就是用她实现的,但是公司不允许这样做的啊!
    那样的话,客户端改动太大了!
      

  6.   

    我觉得用JAVA的RMI机制挺好的,不用管理SOCKET,线程管理也变得很轻松,可以的话用J2EE架构是最好的,我这里有我自己写的一个程序,有用SOCKET连接的和用RMI连接的,你留个EMAIL给我,我发给你参考一下
      

  7.   

    TO:wls981(wls)
    [email protected]  谢谢!
      

  8.   

    顺便问一下:RMI机制是否可以记录当前会话?服务器是否可以在多个客户端之间转发消息?
      

  9.   

    wls981(wls) ( ) 信誉:100 
    能一并转发一份么?
    谢谢
    [email protected]
      

  10.   

    服务器端保存客户端列表可以用Vector,可以动态增长的.
    服务端建立一个等待线程,等待客户端,当接收到时分配一个线程与客户端连接.
      

  11.   

    用RMI是可以保存与客户端的连接的,只不过这时你的客户端也成了服务端了,因为客户端要被服务端访问,要保存客户端的列表可以用HashMap或ArrayList,建议用HashMap,这样可以标识客户端.
    另外建议各位兄弟如果没有特别的需要,不要用老的集合类,如Vector,HashTable,这些都有新的替代类,如Vector可以用ArrayList代替,HashTable可以用HashMap代替,这些新类速度都比老的类快的,
      

  12.   

    小心应用,ArrayList,HashMap有线程安全问题。另外,消息转发是不是意味着通过服务器实现一个点对点的通讯?
      

  13.   

    NIO包是更好的利用操作系统提供的本地io操作来提高IO性能的,并且与channel结合使编写IO方面的程序更加简单化
      

  14.   

    up up up
    说了一大堆东东
    能不能给点代码啊  谢谢拉
      

  15.   

    TO:hongjun_han(han) 
        我想问问,服务器端的一个Channel是不是就是一个单独的线程呢?我的程序中是否需要为每个Channel分配单独的线程?
      

  16.   

    TO:wls981(wls) 
        到这个帖子接分:http://community.csdn.net/Expert/topic/3284/3284749.xml?temp=.8676111
      

  17.   

    TO: chesterwoo() 
       Vector,HashTable没有线程安全问题吗?
       这些集合框架的容量是不是都是动态的?
      

  18.   

    Vector,HasnTable的方法本身就是同步的,因而性能有损失。
      

  19.   

    不指定初始值,ArrayList在自动增加容量的时候会增加50%,而Vector是增加一倍。
    不过使用ArrayList可以在自己的程序中同步,也不会有问题。