socket一个server多个client间的通讯学习历程和demo

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014736095/article/details/39999843

关于socket协议的一个server(服务器)多个client(客户端)间的即使聊天实现

这个月一直在想弄明白即时聊天这这个模块,原来一直以为是要用到socket协议的。不过,上网查了一下资料,都说是即时聊天软件用的基本上都是XMPP技术的,然后又查了一下XMPP这个东西,原来也是一个协议,封装好的一个,然后就没有去深入了解了,先用这个socket来实现看看,毕竟这个socket名字熟悉一点,至少有听过,顺便学习一下socket,提高一下自学能力。

之前有看过mars老师关于socket的视频,但是好像最终是没有运行出来的,可能是我菜吧!就这样,我一点也不了解socket

 

然后我就去查了一下后来终于知道socket的一点点皮毛了,知道他是套接字,socket这个单词就是插口插座的意思,可以有TCP和UDP两个方式进行传输,还有等等我就不在这里细说了。

了解皮毛后尝试做一个简单的通讯,一个server和一个client,但是并没有如愿以偿,期间遇到很多问题,基本上用了一个星期才,拼命百度才解决掉!如下:

1、  服务开在电脑上不会出现那么多奇怪的问题

2、  用模拟器连接电脑的server,ip地址要用10.0.2.2

最后,还是实现了客户端与服务器端之间的通讯,非常开心,为自己庆祝,去喝汤了。哈哈

原本以为,socket之间的通讯就是这样完成了,后来发现,现在只能在客户端给服务器端发送消息,那怎么在服务器端给客户端发送消息呢?难道还要把客户端变成服务器端?这个问题也纠结了很久,最后没办法,也没有人问,只能百度了。天无绝人之路,终于让我找到几段可以运行的代码了,他们也说得很清楚,开两条线程,一条读消息,一条写消息。这样问题就迎刃而解啦。。。。。。。

原本以为,socket之间的通讯就是这样完成了,多几个客户就多几个client端就行了,后来却发现,我太天真了,然后就拼命浏览高手的资料,网上关于这个方面的资料很多,但是很少是我想要的,因为我要找的是一个可以运行出来的一个多个client间的即使通讯工程。最后找不到,还是放弃找现成的工程了,自己按照下面这样的思想去百度。百度的结果也有很多,不过都是说说而已,真正有作用的就只有两篇,这里也忘记了,就不忽悠大家了。

这里需要解决的最大问题是:

server怎样将一个client的消息发给其他的client?代码是什么?

原本以为这个问题应该很容易找出来,最后想不到,百度了很久,都没有这一句代码,因为大家都是只是口头上说说理论,又或者都是无法运行的代码,还有就是只有说一对一(client--àserver)的通讯,没有说一对多的,csdn里反正就找不到这种文章咯,最后我是在百度知道里的一个评论人给的一个网址找到真正的解决方法,其实也很简单:

把所有的输出流放在一个集合里,一起刷新,就可以了。关键代码

/**

     * 向多方发送消息

     * @param who

     * @param msg

     */

    public void notifyAllClients(Socket who,String msg){

       Iterator it=Server.clientLis.iterator();

       while(it.hasNext()){

           try {

              Map<String, Object> map=(Map)it.next();

              if(!(map.get("client")==who)){

                  DataOutputStream dataOutputStream=newDataOutputStream((OutputStream) map.get("out"));

                  dataOutputStream.writeUTF(msg);

              }

           } catch (IOException e) {

              e.printStackTrace();

           }

       }

    }

下面是我的一个demo,一个server和两个client,一个是电脑运行的,一个是模拟器运行的

下载地址:http://download.csdn.net/detail/u014736095/8027261

运行截图

猜你喜欢

转载自blog.csdn.net/u014736095/article/details/39999843
今日推荐