在线做ppt的网站,重庆在线开放课程,建设热电偶网站,浙江省工程信息网官网前言 通信网络-Socket、Java中的网络支持、多线程服务器 场景#xff1a;使用java网络创建一个聊天室 博客地址#xff1a;芒果橙的个人博客 文章目录前言通信网络-SocketTCP/IPTCP/IP 模型端口Java中的网络支持概念1. InetAddress2. URL3. Socket4. Datagram多线程服务器应用…前言 通信网络-Socket、Java中的网络支持、多线程服务器 场景使用java网络创建一个聊天室 博客地址芒果橙的个人博客 文章目录前言通信网络-SocketTCP/IPTCP/IP 模型端口Java中的网络支持概念1. InetAddress2. URL3. Socket4. Datagram多线程服务器应用多线程来实现服务器与多客户端之间的通信通信网络-Socket
两台计算机进行通信的条件 有唯一的标识表示所处的身份和所处的位置IP地址 有共同的语言协议 每台主机都有端口号用来区分哪个应用在通信
TCP/IP
TCP/IP是目前世界上应用最为广泛的协议是以TCP和IP为基础的不同层次上多个协议的集合也称TCP/IP协议族、TCP/IP协议栈TCPTransmission Control Protocol ——传输控制协议IPInternet Protocol ——互联网协议
TCP/IP 模型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SHIZsudK-1677913533652)(F:\website\Blog\blog\source_drafts\image-20230304093601628.png)]
端口
用于区分不同应用程序端口号范围为065535其中01023为系统所保留IP地址和端口号组成了所谓的SocketSocket是网络上运行的程序之间双向通信链路的终结点是TCP和UDP的基础
Java中的网络支持
概念
针对网络通信的不同层次Java中提供的网络功能有四大类
InetAddress用于标识网络上的硬件资源URL统一资源定位符通过URL可以直接读取或写入网络上的数据Sockets使用TCP协议实现网络通信的Socket相关的类Datagram使用UDP协议将数据保存在数据报中通过网络进行通信
1. InetAddress 获取本地的InetAddress实例InetAddress.getLocalHost() 根据机器名获取InetAddress实例InetAddress.getByName() InetAddress inetAddress InetAddress.getLocalHost();System.out.println(IP地址 inetAddress.getHostAddress());System.out.println(计算机名 inetAddress.getHostName());InetAddress ia InetAddress.getByName(NOD4AAITZWEN3FD);System.out.println(IP地址 ia.getHostAddress());System.out.println(计算机名 ia.getHostName());2. URL
Uniform Resource Locator——统一资源定位符表示Internet上某一资源的地址由两部分组成协议名称和资源名称冒号隔开 创建URL实例new URL() URL baidu new URL(http://www.baidu.com);URL url new URL(baidu,/s?wd什么是url);System.out.println(协议 url.getProtocol()); // httpSystem.out.println(主机 url.getHost()); // www.baidu.comSystem.out.println(端口 url.getPort()); // -1 未指定端口则使用默认端口号返回-1System.out.println(查询字符串 url.getQuery()); // wd什么是url3. Socket
TCP协议是面向连接、可靠的、有序的以字节流的方式发送数据
基于TCP协议实现网络通信的类
客户端的Socket类服务端的ServerSocket类
基于tcp的socket模型 Socket和ServerSocket连接的实现步骤
创建ServerSocket和Socket打开连接到Socket的输入/输出流按照协议对Socket进行读/写操作关闭输入输出流、关闭Socket 创建服务端 // 1.创建服务端ServerSocket server new ServerSocket(8888);// 2.监听System.out.println(服务器启动中...);Socket socket server.accept();// 3.获取输入流读取客户端信息InputStream inputStream socket.getInputStream();InputStreamReader inputStreamReader new InputStreamReader(inputStream);BufferedReader bufferedReader new BufferedReader(inputStreamReader);String info;while ((info bufferedReader.readLine()) ! null) {System.out.println(接收到客户端信息 info);}// 4.关闭输入流和资源System.out.println(关闭服务端);socket.close();bufferedReader.close();inputStreamReader.close();inputStream.close();socket.close();server.close();创建客户端 // 1.创建客户端System.out.println(客户端启动中...);Socket client new Socket(localhost,8888);// 2.获取输出流向服务端发送信息OutputStream outputStream client.getOutputStream();PrintWriter printWriter new PrintWriter(outputStream);printWriter.write(我是客户端);printWriter.flush();// 3.关闭输出流和资源client.shutdownOutput();printWriter.close();outputStream.close();client.close();4. Datagram
UDP协议——用户数据报协议是无连接、不可靠、无序的特点是速度比较快
进行数据传输时首先将要传输的数据定义成数据报在数据报中指明数据所要达到的Socket然后再将数据报发送出去
TCP和UDP区别
TCPUDP是否连接面向连接面向非连接传输可靠性可靠不可靠应用场合传输大量数据少量数据速度慢快创建服务端 // 1.创建服务端System.out.println(服务端启动中...);DatagramSocket server new DatagramSocket(8888);// 2.定义数据报byte[] bytes new byte[1024];DatagramPacket datagramPacket new DatagramPacket(bytes, bytes.length);// 3.接收数据//while (true) {server.receive(datagramPacket);// 4.读取数据String info new String(datagramPacket.getData(),datagramPacket.getOffset(),datagramPacket.getLength(), StandardCharsets.UTF_8);System.out.println(接收到客户端信息 info);// 5.关闭资源server.close();System.out.println(服务端关闭...);//}创建客户端 // 1. 定义发送数据String message 我是客户端;byte[] bytes message.getBytes(StandardCharsets.UTF_8);// 2. 创建数据报包含发送的信息DatagramPacket datagramPacket new DatagramPacket(bytes, bytes.length);// 3. 创建SocketSystem.out.println(客户端启动...);DatagramSocket client new DatagramSocket();// 4. 连接并发送client.connect(new InetSocketAddress(localhost,8888));client.send(datagramPacket);// 5. 关闭资源client.close();多线程服务器
应用多线程来实现服务器与多客户端之间的通信
基本步骤
服务端创建ServerSocket循环调用accept()等待客户端连接死循环客户端创建一个Socket并请求和服务端连接服务端接收客户端请求创建Socket与该客户端建立连接建立连接的两个socket在一个单独的线程中对话服务端持续等待新的连接