【JavaEE 初阶(六)】网络编程

❣博主主页: 33的博客❣
▶️文章专栏分类:JavaEE◀️
🚚我的代码仓库: 33的代码仓库🚚
🫵🫵🫵关注我带你了解更多网络知识

在这里插入图片描述

目录

  • 1.前言
  • 2.浅谈网络
    • 2.1基本知识
    • 2.2.OSI与TCP/IP
  • 3.网络编程
    • 3.1TCP与UDP区别
    • 3.2UDP网路编程
    • 3.3TCP网络编程
  • 4.总结

1.前言

在日常生活中,我们处处都需要用到网络,比如我们在自己的电脑上编辑一条信息是如何发送到对方的电脑上的呢?我相信通过对网络的学习大家一定有不少的收获。

2.浅谈网络

2.1基本知识

网络的发展:单机时代-局域网时代-广域网时代-移动互联网时代
局域网:把几个电脑通过一个路由器连接到一起
广域网:把更多的局域网连接在在一起
IP地址:描述了一台设备在网络上的地址
端口号:不同程序关联了不同的端口号,一个端口号只能绑定一个程序但是一个程序可以绑定多个端口号。
协议:一种约定
五元组:源IP地址,目的IP地址,源端口号,目的端口号,协议类型
协议分层:如果搞一个大的协议来解决所有问题,那么这个协议就会非常的胖达,所以我们就进行拆分,由于通信实在太复杂,拆分出来的小协议就非常多,所以就进行了分层,约定了不同层次之间的调用关系,上层协议调用下层协议,下层协议给上层协议提供支持。

2.2.OSI与TCP/IP

OSI七层网络模型仅仅是在教科书中出现,在日常的生活中并不常见。TCP/IP五层网络协议是七层网络模型的简化版本。
在这里插入图片描述
1.物理层:描述的是通信网络的硬件设备,例如网线或者光纤。
2.数据链路层:两个相邻节点的传输情况,负责设备之间的数据帧的传送和识别。
3.网络层:进行路径规划,负责地址管理和路由选择。
4.传输层:关注起点和终点,负责两台主机之间的数据传输。
5.应用层:如何使用这个数据
注意

  • 对于一台主机,它实现了从物理层到应用层,5层
  • 对于一台路由器,它实现了物理层到网络层,3层
  • 对于一台交换机,它实现了从物理层到数据链路层,2层
    对于集线器,只实现物理层

3.网络编程

通过网络,可以让两个主机进行通信。进行网络编程的时候,需要操作系统提供API,这组API其实就是Socket API可以认为是应用层和传输层之间交互的路径。通过这组API就可以完成不同主机,不同系统之间的通信。

3.1TCP与UDP区别

传输层提供了2个协议是:TCP和UDP,那有什么区别呢?
TCP是有连接的,UDP是无连接的:TCP保存了对方信息,UDP没有保存
TCP是可靠的,UDP是不可靠的:TCP消息发出能够知道是否到达,UDP不知道。
TCP是面向字节流,UDP是面向数据报:TCP以字节为单位传输,UDP以数据报为单位进行传输
TCP和UDP都是全双工:允许双向通信

3.2UDP网路编程

让客户短发送一个请求,服务器收到请求以后返回发给客户端,再显示:
服务器:

package UDP;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;public class UdpEchoServer {DatagramSocket socket=null;//设置端口号public UdpEchoServer(int port) throws SocketException {socket=new DatagramSocket(port);}//启动服务器public void start() throws IOException {System.out.println("启动服务器");while (true){//1、读取请求解析DatagramPacket requestpacket=new DatagramPacket(new byte[4096],4096);socket.receive(requestpacket);//此时数据是以二进制的形式存放早数组中,将其以字符串形式显示String request=new String(requestpacket.getData(),0,requestpacket.getLength());//2.响应String response=process(request);//3.响应回到客户端DatagramPacket responsePacket=new DatagramPacket(response.getBytes(),response.getBytes().length,requestpacket.getSocketAddress());socket.send(responsePacket);//4.打印日志System.out.printf("[%s:%d] req=%s, resp=%s\n",requestpacket.getAddress().toString(),requestpacket.getPort(),request,response);}}private String process(String request) {return request;}public static void main(String[] args) throws IOException {UdpEchoServer udpEchoServer=new UdpEchoServer(9090);udpEchoServer.start();}
}

客户端:

package UDP;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class UdpEchoClient {DatagramSocket socket=null;String ip="";int port=0;public UdpEchoClient(String ip,int port) throws SocketException {socket=new DatagramSocket();this.ip=ip;this.port=port;}//客户端启动public void start() throws IOException {Scanner scanner=new Scanner(System.in);while (true){System.out.println("->");//控制台输入数据作为请求String request=scanner.next();//发送请求DatagramPacket requestpacket=new DatagramPacket(request.getBytes(),request.getBytes().length, InetAddress.getByName(ip),port);socket.send(requestpacket);//读取响应DatagramPacket responsepacket=new DatagramPacket(new byte[4096],4096);socket.receive(responsepacket);//打印响应String response=new String(responsepacket.getData(),0,responsepacket.getLength());System.out.println(response);}}public static void main(String[] args) throws IOException {UdpEchoClient udpEchoClient=new UdpEchoClient("127.0.0.1",9090);udpEchoClient.start();}
}

3.3TCP网络编程

客户端:

package TCP;import java.io.*;
import java.net.Socket;
import java.util.Scanner;public class TcpEchoClient {Socket socket=null;public TcpEchoClient(String IP,int port) throws IOException {socket=new Socket(IP,port);}//服务器启动public void start(){System.out.println("客户端启动!");Scanner scanner=new Scanner(System.in);try (InputStream inputStream=socket.getInputStream();OutputStream outputStream=socket.getOutputStream()) {PrintWriter writer=new PrintWriter(outputStream);Scanner scannernet=new Scanner(inputStream);while (true){System.out.println("->");String request=scanner.next();//发送请求writer.println(request);writer.flush();//读取响应String response=scannernet.next();//打印响应System.out.println(response);}} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) throws IOException {TcpEchoClient tcpEchoClient=new TcpEchoClient("127.0.0.1",9090);tcpEchoClient.start();}
}

服务器:

package TCP;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;public class TcpEchoServer {ServerSocket socket=null;public TcpEchoServer(int port) throws IOException {socket=new ServerSocket(port);}public void start() throws IOException {System.out.println("服务器启动");while (true){Socket clientsocket= socket.accept();Thread t=new Thread(()->{processConnection(clientsocket);});t.start();}}private void processConnection(Socket clientsocket)  {//服务器启动System.out.printf("[%s:%d] 客户端上线\n",clientsocket.getInetAddress(),clientsocket.getPort());try (InputStream inputStream=clientsocket.getInputStream();OutputStream outputStream=clientsocket.getOutputStream()) {//连接请求分析while (true) {Scanner scanner = new Scanner(inputStream);if (!scanner.hasNext()) {System.out.printf("[%s:%d] 客户端下线\n", clientsocket.getInetAddress(), clientsocket.getPort());break;}String request = scanner.next();//做出响应String response = process(request);//发送给客户端PrintWriter writer = new PrintWriter(outputStream);writer.println(response);writer.flush();//打印以下交互过程System.out.printf("[%s:%d],req=%s,rep=%s\n", clientsocket.getInetAddress(), clientsocket.getPort(), request, response);}} catch (IOException e) {e.printStackTrace();}finally {try {clientsocket.close();} catch (IOException e) {e.printStackTrace();}}}private String process(String request) {return request;}public static void main(String[] args) throws IOException {TcpEchoServer tcpEchoServer=new TcpEchoServer(9090);tcpEchoServer.start();}
}

4.总结

本篇文章主要讲述了利用UDP和TCP进行网络编程,我们要掌握客户端与服务器的各个流程.

下期预告:网络原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四川易点慧电商抖音小店:优势尽显,引领电商新潮流

在当下这个信息爆炸、消费模式日新月异的时代,电商行业正在经历一场前所未有的变革。四川易点慧电商抖音小店凭借其独特的优势,成功吸引了大量消费者的目光,成为电商领域的一股新势力。 四川易点慧电商抖音小店的最大优势在于其强大的品牌影…

Vue3实战笔记(19)—封装菜单组件

文章目录 前言一、封装左侧菜单导航组件二、使用步骤三、小彩蛋总结 前言 在Vue 3中封装一个左侧导航菜单组件是一项提升项目结构清晰度和代码可复用性的关键任务。这个过程不仅涉及组件的设计与实现,还需考虑其灵活性、易用性以及与Vue 3新特性的紧密结合。以下是…

如何恢复删除的文件?收好6个恢复策略!

“我经常在操作电脑时可能会有误删文件的情况发生,如果我不小心删除了重要的文件,应该使用什么方法来恢复它们呢?求解答!” 在使用电脑时,我们可能一个手滑就误删了重要的文件。当文件删除后,如果没有掌握相…

用调试的方式来阅读复杂的C++工程代码以及调试技巧

目录 1 用调试的方法阅读代码 1.2 从外到里,从整体到局部 1.2 从里到外阅读 2 调试技巧 2.1 打断点位置问题 2.2 增加调试代码 </

win10安装mysql8.0+汉化

一、官网安装 MySQL 1. 在mysql官网进行下载页面 2. 下滑页面&#xff0c;选择 MySQL community download 3.下载windows版本 4.选择第二个download 5.不用登陆&#xff0c;no thanks&#xff0c;just start my download. 6.下载 二、安装 1. 双击安装 2. 选 Full->next 3…

depcheck检查项目中未被使用的依赖

depcheck是一个用于分析项目中依赖项的工具&#xff0c;可以查看&#xff1a;每个依赖项是如何使用的&#xff0c;哪些依赖项是无用的&#xff0c;以及哪些依赖项在package.json 1、安装 npm install -g depcheck # 必须全局安装2、可配置文件.depcheckrc&#xff08;不配置 直…

开源模型应用落地-CodeQwen模型小试-集成langchain(四)

一、前言 通过学习代码专家模型&#xff0c;开发人员可以获得高效、准确和个性化的代码支持。这不仅可以提高工作效率&#xff0c;还可以在不同的技术环境中简化软件开发工作流程。代码专家模型的引入将为开发人员带来更多的机会去关注创造性的编程任务&#xff0c;从而推动软件…

kafka管理工具 kafka-ui 的 k8s 部署

背景 实际使用中&#xff0c;部署好kafka集群后&#xff0c;需要管理集群&#xff0c;那么一个好的web控制台就显得尤为重要了。 直接上部署代码&#xff0c;亲测可用 开源链接 https://github.com/provectus/kafka-ui 效果预览 部署 配置文件 kafka-ui-cm 注意&#x…

【轮转数组】力扣python

1.python切片 这里nums[:]代表列表 class Solution:def rotate(self, nums: List[int], k: int) -> None:nlen(nums)nums[:]nums[-k%n:]nums[:-k%n] 2.边pop边push 0代表插入的位置 class Solution:def rotate(self, nums: List[int], k: int) -> None:nlen(nums)fo…

搭建一个根据语义相似度进行文本去重服务

背景 1、在做大模型训练的时候&#xff0c;我们需要进行数据集的处理&#xff0c;而很多情况下我们收集到的数据集会存在重复数据&#xff0c;针对去重&#xff0c;有两种&#xff0c;一种是完全重复&#xff0c;也就是数据集里面有一个A&#xff0c;还有存在了着另外一个A&am…

花趣短视频源码淘宝客系统全开源版带直播带货带自营商城流量主小游戏功能介绍

1、首页仿抖音短视频 &#xff0c;关注 &#xff0c;我的 本地 直播 可发布短视频 可录制上传 2、商城页面 广告位、淘口令识别、微信登录、淘宝登录、淘宝返佣、拼多多返佣、京东返佣、唯品会返佣、热销榜、聚划算、天猫超市、9.9包邮、品牌特卖、新人攻略 、小米有品、优惠加…

不知摄像机网段IP地址?别担心,这里有解决之道

在数字化、智能化的今天&#xff0c;摄像机作为安全监控和日常记录的重要工具&#xff0c;其应用越来越广泛。然而&#xff0c;在实际使用中&#xff0c;我们可能会遇到一些问题&#xff0c;比如忘记了摄像机的网段IP地址&#xff0c;这往往会让我们感到头疼。那么&#xff0c;…

LearnOpenGL(十五)之深度测试

一、深度缓冲 深度缓冲就像颜色缓冲(Color Buffer)&#xff08;储存所有的片段颜色&#xff1a;视觉输出&#xff09;一样&#xff0c;在每个片段中储存了信息&#xff0c;并且&#xff08;通常&#xff09;和颜色缓冲有着一样的宽度和高度。深度缓冲是由窗口系统自动创建的&a…

Linux操作系统基础题库

一. 单选题&#xff08;共2题&#xff0c;40分&#xff09; 1. (单选题)Linux操作系统自诞生至今&#xff0c;有数十万的程序开发人员参与到了它的开发与完善中&#xff0c;如今Linux已发展成为是一个成熟、稳定的操作系统。从以下选项中选出关于Linux特点描述完全正确的一项。…

C++的相关知识集

1、C概述 1 两大编程思想 c语言在c语言的基础上添加了面向对象编程和泛型编程的支持。c继承了c语言高效&#xff0c;简洁&#xff0c;快速和可移植的传统。 2 起源 与c语言一样&#xff0c;c也是在贝尔实验室诞生的&#xff0c;Bjarne Stroustrup(本贾尼斯特劳斯特卢普)在2…

解决kali linux ssh连接失败

kali linux 默认ssh是禁止root登录的 为了通过 SSH 进入你的 Kali Linux 系统&#xff0c;你可以有两个不同的选择。第一个选择是创建一个新的非特权用户然后使用它的身份来登录。第二个选择&#xff0c;你可以以 root 用户访问 SSH 。为了实现这件事&#xff0c;需要在SSH 配…

企业任职资格机制的剖析

任职资格是指为了保证工作目标的实现&#xff0c;任职者必须具备的知识、技能、能力和个性等方面的要求。它常常以胜任职位所需的学历、专业、工作经验、工作技能、能力加以表达。近年来&#xff0c;员工能力的开发得到越来越多企业的重视&#xff0c;为有效提升员工能力&#…

AI早班车5.11

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

(二)Spring教程——Spring框架特点

Spring框架是为了简化企业级应用开发而创建的&#xff0c;其强大之处在于对Java SE和Java EE开发进行全方位的简化&#xff0c;Spring还对常用的功能进行封装&#xff0c;可以极大地提高Java EE的开发效率。 Spring的应用极其广泛&#xff0c;无论是服务器开发还是任何Java应用…

虽然工作好久好久了,Spring 框架还是很有必要反复的去思考去理解

各位客观老爷们&#xff0c;此篇为移花接木&#xff0c;借花献佛 --> 访问链接地址↓ https://blog.csdn.net/weixin_44207403/article/details/106736102?ops_request_misc%257B%2522request%255Fid%2522%253A%2522171539922216800184117607%2522%252C%2522scm%2…