这个中转服务器是通过UDP协议在一个有公网独立IP的服务器上进行转发消息,从而达到一种群聊的效果,让连接上这个中转服务器的客户端之间能够互相发消息。
首先编写UDP中转服务器类,这个服务器是线程池做的多线程服务器,这个服务器能记录连接的服务器客户端IP和端口。但是由于UDP和TCP不同,UDP无法建立长时间的连接,无法建立长时间的连接的话,我们怎么知道客户端是连接着还是断开的状态呢?还有如果客户端更换了IP和端口的话,如何对之前记录的IP端口信息进行删除呢?这时候就需要用到“心跳包”的方式来确认客户端的状态和信息了,心跳包就是让客户端每隔两秒发送一次客户端的信息,例如IP、端口、时间等等,如果客户端超过五秒还没有发送心跳包的话,这个客户端就会被判定为断开状态,然后这些信息还会跟随一个md5,所以我们可以使用Hashtable集合来存储这些信息,使用md5作为键值,就可以方便的通过键值取值了。
因为心跳包要接收客户端的发送的数据信息,然后这些信息中的IP信息也要转发到其他的客户端上,所以我们还需要编写一个客户端的信息封装类。
UDP中转服务器类代码示例:
客户端信息封装类代码示例:
编写好服务器后,接下来就是编写客户端了,首先绘制一个图形界面,界面上会有两个按钮,一个按钮是用来连接服务器IP的,一个按钮是用来发送消息的。所以需要用委托事件模式,使用监听器监听这个两个按钮,当被点击的时候就执行相应的代码。
然后还需要编写一个客户端服务类,这个类要完成向服务器发送心跳包数据还有消息数据和连接服务器的IP等业务,还有显示服务器上转发过来的消息,将消息显示到图形界面上。
图形界面代码示例:
客户端服务代码示例:
运行结果:
本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1976693,如需转载请自行联系原作者