我这里想写一个简单的局域网开发软件!当我写到服务器的时候我就郁闷了,建一个HashMap集合用来存客户端的Socket,我们服务端应该是要不停的去接受客户端的信息,和把客户端的信息发送出去……写到这里停笔了,不知道 怎么向 下写了,就是这里的不停的发,和接,  ……那位大哥大姐,能一下小弟,客户端的自己可以搞定,那个没有服务器端复杂……

解决方案 »

  1.   

    为每个连接的socket都建立一条接收消息的线程
      

  2.   

    到我博客看看就知道怎么写了很easy的。。
      

  3.   

    思路要清晰。
        首先要清楚服务器端是做什么的,很明显在现在的情况下服务器端得做两件事:
    1、循环等待接收客户端的连接。
    2、接收来自各个客户端发的消息,再把它们转发出去。很明显,这不是单线程可以完成的工作,所以自然而然就要采用多线程。
    主线程:while(true){     //或者用一个boolean变量控制,看需求
                 Socket s = ss.accept()
                 ……
                 Client c = new Client();
                 list.add(c)
             }
    主线程每接收到一个客户端的连接,就将该客户端加到自己的集合中分线程:接收来自客户端的消息包,然后将它转发给自己集合中的所有其它客户端
             DatagramSocket ds = new DatagramSocket(s);      //采用UDP协议接收消息
             DatagramPacket dp = new DatagtamPacket(ds);
             while(true) {                                   //这里同上
             dp.receive()                                    //这里注意接收的时候的一些细节
             ……                                           //设置目标地址,转发
             for(Client c : list) {
                 dp.send()
             }
    大体思路就是这样,不过还有些细节是需要注意的,比如说怎么判断是不是自己发出的包之类的。
    总之多想多思考,把流程画出来再写代码,会轻松许多。最后,加油吧。
      

  4.   

    因为没用IDE写的,所以有些语法什么的肯定不是这样的,但相信你通过查询API肯定能做出来的。
      

  5.   

    同问: "服务端应该是要不停的去接受客户端的信息,和把客户端的信息发送出去……"
    1。服务器一般只是接受消息,不会主动发送消息吧。 
    2。如如果服务器可以主动发消息连接到客户端(用客户端的IP),那为什么客户端之间不直接P2P 的通信,而要经过服务器转发呢?服务器的负载不是很大?
    3。我的客户端在手机上运行呢? 服务器能发送消息给手机吗?还是手机定时发消息给服务器获取消息留言?
      

  6.   

    同意4楼,我就是用这种方式来做lz的这个项目。
    每次客户端所发的数据都是一个线程,而服务器端用循环来创建socket就行了。
      

  7.   


    我做过这种东西,我的第一桶金就是靠它挣的呢。你的思路和我当初一样,补充一点就好:当你新获取了个socket连接请求的时候,就新开一个线程,专门监听从这个socket传来的消息,做出响应。
      

  8.   

    楼主,你要的东西,或许这里有
    http://download.csdn.net/source/2057824
      

  9.   

    “每次客户端所发的数据都是一个线程,而服务器端用循环来创建socket就行了??”客户端也要新建 ServerSocket来监听服务器的消息吗? 客户端也成服务器了?
      

  10.   

    贴一个完整的代码供参考,
    1.支持都客户端,
    2.消息通过服务器中转。http://mybeautiful.javaeye.com/blog/659317当然界面不怎么友好,作为聊天程序的原型,可以参考下。
      

  11.   


    有所误解, 是服务端用一个循环,等待客户端的连接,而每收到一个客户端连接,则产生一个socket,并生成一个新线程专门负责和这个客户端通信。