详解Java实现网络通信(TCP、UDP通信)——实现群聊功能
2023-12-26 21:16:01
引文
网络通信三要素
1.IP地址
描述
InetAddress类
静态方法直接类名.调用
示例代码:
2.端口
3.协议
TCP和UDP通信
UPD协议
TCP协议
三次握手建立连接
TCP协议通过三次握手确认客户端和服务端收发消息都没问题。
四次握手断开连接
1.UDP通信
示例代码
1.客户端发数据
注意最后用完的话,记得socket.close()释放资源
2.服务端接收数据(要接收多个客户端的数据,多开客户端就行)
服务器一般要长期运行,可以socket.close()根据具体情况来写
3.服务端不但可以接收数据,还可以接收客户端ip地址和端口号
2.TCP通信
1.客户端开发
2.服务端开发
dis.readUTF()后记得dis.flush();
总结
3.多发多收
服务端没必要dis.close()和socket.close()
若服务端断开连接,服务端抛异常
所以服务端可以捕获异常
上面代码的缺点是服务端是只能接收第一个客户端的请求(一直卡在dis.readUTF哪里接收第一个客户端的消息),只能与一个客户端进行通信,要与多个客户端进行通信需要用多线程知识
4.多个客户端同时通信(重点)
改善服务端代码
5.综合案例(群聊——C/S架构)
1.
发消息给所有人
3.创建客户端线程接收群聊中所有人发的消息
4.客户端为每个其他客户端创建一个线程接收该客户端的消息
3.实现一个简单的B/S架构(案例)
B/S架构无需开发客户端(浏览器),只需服务端
客户端开发
4.用线程池优化BS架构
用线程池的好处,当任务队列不多时,可以一直用指定数量的线程处理任务,不用每次来个任务就创建一个线程来进行处理,还有就是防止创建很多线程以至于宕机。
文章来源:https://blog.csdn.net/qq_62614525/article/details/135229509
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!