详解Java实现网络通信(TCP、UDP通信)——实现群聊功能

引文

image-20231208162202224

image-20231208162309407

image-20231208162330178

image-20231208162410346

image-20231208162442779

网络通信三要素

image-20231208162518965

1.IP地址

描述

image-20231208162633520

image-20231208162704856

image-20231208162940923

image-20231208163110575

InetAddress类

静态方法直接类名.调用

image-20231208163256785

示例代码:

image-20231208163344540

image-20231208163531822

image-20231208163719186

2.端口

image-20231208164029023

3.协议

image-20231208164112777

image-20231208164316466

TCP和UDP通信

UPD协议

image-20231208165627091


TCP协议

image-20231208165035826

三次握手建立连接

image-20231208165132391

TCP协议通过三次握手确认客户端和服务端收发消息都没问题。

四次握手断开连接

image-20231208165522947


1.UDP通信

image-20231208170013749

image-20231208170128938

示例代码

1.客户端发数据

image-20231208170506347

注意最后用完的话,记得socket.close()释放资源

2.服务端接收数据(要接收多个客户端的数据,多开客户端就行)

image-20231208170926379

服务器一般要长期运行,可以socket.close()根据具体情况来写

3.服务端不但可以接收数据,还可以接收客户端ip地址和端口号

image-20231208171143391

2.TCP通信

1.客户端开发

image-20231208171936440

image-20231208172210117

2.服务端开发

image-20231208172434669

image-20231208172705427

dis.readUTF()后记得dis.flush();

总结

image-20231208172833240

3.多发多收

image-20231208173106310

服务端没必要dis.close()和socket.close()

image-20231208173229375

若服务端断开连接,服务端抛异常

image-20231208173443703

所以服务端可以捕获异常

image-20231208173604027

上面代码的缺点是服务端是只能接收第一个客户端的请求(一直卡在dis.readUTF哪里接收第一个客户端的消息),只能与一个客户端进行通信,要与多个客户端进行通信需要用多线程知识

4.多个客户端同时通信(重点)

image-20231208174422733

改善服务端代码

image-20231208174843573

image-20231208174916406

5.综合案例(群聊——C/S架构)

image-20231208175102539

1.

image-20231208180654227

  1. image-20231208180314230

image-20231208180632192

发消息给所有人

image-20231208180747888

3.创建客户端线程接收群聊中所有人发的消息

image-20231208180918013

4.客户端为每个其他客户端创建一个线程接收该客户端的消息

image-20231208181001101

3.实现一个简单的B/S架构(案例)

image-20231208181347040

B/S架构无需开发客户端(浏览器),只需服务端

image-20231208181951993

image-20231208182012279

客户端开发

image-20231208182345693

4.用线程池优化BS架构

用线程池的好处,当任务队列不多时,可以一直用指定数量的线程处理任务,不用每次来个任务就创建一个线程来进行处理,还有就是防止创建很多线程以至于宕机。

image-20231208183132824

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫青.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值