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

引文

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第1张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第2张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第3张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第4张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第5张图片

网络通信三要素

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第6张图片

1.IP地址

描述

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第7张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第8张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第9张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第10张图片

InetAddress类

静态方法直接类名.调用

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第11张图片

示例代码:

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第12张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第13张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第14张图片

2.端口

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第15张图片

3.协议

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第16张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第17张图片

TCP和UDP通信

UPD协议

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第18张图片


TCP协议

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第19张图片

三次握手建立连接

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第20张图片

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

四次握手断开连接

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第21张图片


1.UDP通信

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第22张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第23张图片

示例代码

1.客户端发数据

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第24张图片

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

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

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第25张图片

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

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

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第26张图片

2.TCP通信

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第27张图片

1.客户端开发

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第28张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第29张图片

2.服务端开发

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第30张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第31张图片

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

总结

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第32张图片

3.多发多收

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第33张图片

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

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第34张图片

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

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第35张图片

所以服务端可以捕获异常

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第36张图片

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

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

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第37张图片

改善服务端代码

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第38张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第39张图片

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

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第40张图片

1.

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第41张图片

  1. 详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第42张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第43张图片

发消息给所有人

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第44张图片

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

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第45张图片

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

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第46张图片

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

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第47张图片

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

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第48张图片

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第49张图片

客户端开发

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第50张图片

4.用线程池优化BS架构

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

详解Java实现网络通信(TCP、UDP通信)——实现群聊功能_第51张图片

你可能感兴趣的:(Java学习从0到1,tcp/ip,udp,网络通信,B/S架构,群聊功能)