前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UDP中转服务器

UDP中转服务器

作者头像
端碗吹水
发布2020-09-23 10:34:03
3.3K0
发布2020-09-23 10:34:03
举报
文章被收录于专栏:程序猿的大杂烩

UDP中转服务器:

这个中转服务器是通过UDP协议在一个有公网独立IP的服务器上进行转发消息,从而达到一种群聊的效果,让连接上这个中转服务器的客户端之间能够互相发消息。

首先编写UDP中转服务器类,这个服务器是线程池做的多线程服务器,这个服务器能记录连接的服务器客户端IP和端口。但是由于UDP和TCP不同,UDP无法建立长时间的连接,无法建立长时间的连接的话,我们怎么知道客户端是连接着还是断开的状态呢?还有如果客户端更换了IP和端口的话,如何对之前记录的IP端口信息进行删除呢?这时候就需要用到“心跳包”的方式来确认客户端的状态和信息了,心跳包就是让客户端每隔两秒发送一次客户端的信息,例如IP、端口、时间等等,如果客户端超过五秒还没有发送心跳包的话,这个客户端就会被判定为断开状态,然后这些信息还会跟随一个md5,所以我们可以使用Hashtable集合来存储这些信息,使用md5作为键值,就可以方便的通过键值取值了。

因为心跳包要接收客户端的发送的数据信息,然后这些信息中的IP信息也要转发到其他的客户端上,所以我们还需要编写一个客户端的信息封装类。

UDP中转服务器类代码示例:

1e29f937751e98ec754991d31ead948b.png
1e29f937751e98ec754991d31ead948b.png
499dd65997e78e9f5ee98ae8d38ca938.png
499dd65997e78e9f5ee98ae8d38ca938.png
e928da1dc1960a722bd7e8546f141ba3.png
e928da1dc1960a722bd7e8546f141ba3.png

客户端信息封装类代码示例:

ae65ed75e209c93a662d0339c2c253f5.png
ae65ed75e209c93a662d0339c2c253f5.png
01ed0d6b7720c1e83abcc1dc6e38a541.png
01ed0d6b7720c1e83abcc1dc6e38a541.png

编写好服务器后,接下来就是编写客户端了,首先绘制一个图形界面,界面上会有两个按钮,一个按钮是用来连接服务器IP的,一个按钮是用来发送消息的。所以需要用委托事件模式,使用监听器监听这个两个按钮,当被点击的时候就执行相应的代码。

  然后还需要编写一个客户端服务类,这个类要完成向服务器发送心跳包数据还有消息数据和连接服务器的IP等业务,还有显示服务器上转发过来的消息,将消息显示到图形界面上。

图形界面代码示例:

a0e2e7e45f82e7c0618da8050f1c3fd1.png
a0e2e7e45f82e7c0618da8050f1c3fd1.png
04b722f2a526496b9c5c7455310b4ac8.png
04b722f2a526496b9c5c7455310b4ac8.png
b899bd5ea989a3df8b9e0a3851f9a410.png
b899bd5ea989a3df8b9e0a3851f9a410.png

客户端服务代码示例:

228465e7ccc7955e59240087d1d02831.png
228465e7ccc7955e59240087d1d02831.png
9b33df89723e3ffc3f03c67f2f1c5ab4.png
9b33df89723e3ffc3f03c67f2f1c5ab4.png

运行结果:

94e6bf567d9ab97ead7e834ff1125f8d.png
94e6bf567d9ab97ead7e834ff1125f8d.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/10/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档