4.14学习总结

java网络编程

一.网络编程的概念和原理

概念:

网络编程是指通过计算机网络进行数据传输和通信的编程技术。在网络编程中,可以实现不同计算机之间的数据交互和通信,从而实现分布式系统、客户端-服务器应用等。

Java网络编程基于TCP/IP协议栈进行通信,使用Socket和ServerSocket类来实现网络连接和数据传输。Java提供了丰富的网络编程API,包括Socket编程、URL处理、HTTP客户端等,使得开发人员可以方便地构建各种网络应用。

原理:

网络编程基于TCP/IP协议栈,其中TCP(传输控制协议)提供可靠的数据传输和连接管理,而IP(Internet协议)负责数据包的路由和传输。

Java网络编程的原理是建立基于TCP/IP协议的网络连接,并通过Socket进行数据传输。Socket是一种抽象概念,表示网络上的一个端点,可以通过Socket实现数据的读取和写入。

Java的Socket编程基于阻塞IO模型,即程序在读取和写入数据时会阻塞当前线程,直到数据准备好或写入完成。为了提高性能和并发能力,可以使用多线程或非阻塞IO模型来处理网络连接和数据传输。

二.网络编程的要素

(一).IP地址

IP地址和端口号是计算机网络中的重要概念,它们用于在网络上唯一标识一个通信实体或进程。

IP地址是指互联网协议地址,它是由32位二进制数表示的,通常使用点分十进制数表示。IP地址的作用是用来标识网络上的设备,类似于电话号码,可以用来进行网络通信。在通信过程中,源设备通过IP地址找到目的设备,然后发送数据。

 

(二).端口

端口号则是指在一个设备中运行的应用程序的标识符,它是一个16位的整数(0~65535)。每个端口号都对应着一个特定的应用程序,例如HTTP应用使用80端口,FTP应用使用21端口等。在通信过程中,源设备通过端口号找到目的设备上的特定应用程序,然后将数据传送给它。

 

 端口和IP的区别和特点:

  • IP地址和端口号的组合可以唯一地标识一个通信实体或进程,因此在进行网络通信时,需要同时指定通信双方的IP地址和端口号。
  • 当用户在浏览器中输入域名时,浏览器会向DNS服务器发送请求,以获取对应的IP地址。因此,域名与IP地址是一一对应的关系。从技术上来说,一个域名可以对应多个IP地址,这是为了实现负载均衡和故障转移等目的,但通常情况下,一个域名只对应一个IP地址。
  • 而端口号则用于标识设备中运行的具体应用程序。同一个设备上运行的不同应用程序会使用不同的端口号进行区分。在进行网络通信时,源设备通过IP地址和端口号找到目标设备上特定的应用程序,然后将数据传送给它。

 

 

(三). TCP协议: (安全,有连接确认可靠)

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的传输层协议。它在互联网上广泛应用于数据传输中,例如 HTTP、FTP 等应用层协议都是基于 TCP 协议工作的。

TCP 协议的主要特点包括:

  1. 面向连接:在进行数据通信前,需要先通过三次握手建立连接,连接成功后才能进行数据传输。
  2. 可靠性:TCP 提供可靠的数据传输,这是通过利用确认、重传等机制来实现的。
  3. 拥塞控制:TCP 通过拥塞窗口、慢启动以及拥塞避免等机制来有效地控制网络拥塞。
  4. 流量控制:TCP 通过滑动窗口机制来实现流量控制,保证数据接收方不会被发送方的数据淹没。

 TCP 协议的通信过程分为三个阶段:

建立连接、数据传输和断开连接。建立连接时,客户端向服务端发送 SYN 报文,服务端收到后回复一个 SYN+ACK 报文,客户端再向服务端发送一个 ACK 报文,这个过程就是三次握手。之后就可以进行数据传输,数据传输完毕后,双方可以通过四次挥手的方式来断开连接。

 

 

实例:

public class TCPClient2 {
    public static void main(String[] args) throws IOException {
        Socket socket=new Socket("127.0.0.1",1000);
        OutputStream os=socket.getOutputStream();
        Scanner sc=new Scanner(System.in);
        while (true) {
            System.out.println("请输入你要传输的数据:");
            String str=sc.nextLine();
            if(str.equals("886")){
                break;
            }
            os.write(str.getBytes());
        }
        os.close();
        socket.close();
    }
}
public class TCPServer2 {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket=new ServerSocket(1000);
        Socket socket=serverSocket.accept();
        InputStreamReader inputStreamReader=new InputStreamReader(socket.getInputStream());
        int len;
        while((len=inputStreamReader.read())!=-1){
            System.out.print((char)len);
        }
        //inputStreamReader.close();
        socket.close();
        serverSocket.close();
    }
}

 

(四).UDP协议:(速度快,无连接,不可靠)

不需要建立连接(因为把数据源IP、目的地IP、端口封装成数据包),每个数据包在64KB内,只管发,不管对方有没有接到确认什么的。

UDP协议的特点:

  1. 基于无连接:UDP不需要像TCP那样在发送数据前先建立连接,因此发送数据时不需要等待对方的回应,进而节省了时间和资源。
  2. 不可靠:UDP不提供可靠性保证,所以数据的传输可能会出现丢失、乱序、重复等问题。由于没有确认机制和重传机制,数据包一旦发送出去,就无法得知其是否被对方接收到。
  3. 简单快速:由于UDP减少了很多可靠性保证的开销,因此运行效率要比TCP高。
  4. 支持单播、广播和多播等通信方式:UDP支持将数据包同时发送给多个接收者,因此可以用于多媒体流传输、在线游戏等应用场景。
  5. 数据包大小受限:由于UDP数据包头部只有8字节,因此数据包大小最大为64KB,不适合传输大量数据。

UDP适合那些对可靠性要求不高的应用场景,如DNS解析、视频、语音等实时传输或者数据量较小的应用。但是如果需要确保数据的可靠性和完整性,TCP会是更好的选择。

实例:

public class UDPsend2 {
    public static void main(String[] args) throws IOException {
        //1.创建对象
        DatagramSocket ds=new DatagramSocket();
        //2.打包数据
        Scanner sc=new Scanner(System.in);
        while (true) {
            System.out.println("请输入要传输的数据:");
            String str=sc.nextLine();
            if(str.equals("886")){
                break;
            }
            InetAddress inetAddress=InetAddress.getByName("127.0.0.1");
            int pot=10086;
            byte[] bytes=str.getBytes();
            DatagramPacket dp=new DatagramPacket(bytes,bytes.length,inetAddress,pot);
            //3.发送数据
            ds.send(dp);
        }
        //4.释放资源
        ds.close();;
    }
}

 

public class UDPreceive2 {
    public static void main(String[] args) throws IOException {
        //1.创建对象
        DatagramSocket ds=new DatagramSocket(10086);
        //2.接收对象
        byte[]bytes=new byte[1024];
        DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
        while (true) {
            ds.receive(dp);
            //3.解析数据
            byte[]data= dp.getData();
            InetAddress address = dp.getAddress();
            String ip=dp.getAddress().getHostAddress();
            String name=dp.getAddress().getHostName();
            int port = dp.getPort();
            int length = dp.getLength();
            System.out.println("ip为:"+ip+"主机名为:"+name+"的人,发送了数据:"+new String(data,0,length));
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件测试基础知识点汇总

1、衡量一个优秀软件的维度 质量模型:功能性、性能、兼容性、易用性、可靠性、安全、可维护性、可移植性。 2、软件测试流程 需求评审、计划编写、用例设计、用例执行、缺陷管理、测试报告 3、用例设计编写格式 用例编号、用例标题、项目/模块、优先级、前置条…

数学公式编辑器mathtype2024特别版含激活序列

MathType 7是一款专业的数学公式编辑工具,广泛应用于教育教学、科研机构、工程学、物理学、化学等多个领域。它支持各种数学符号、公式、方程式、矩阵、分数、上下标等,几乎涵盖了所有的数学元素,可以帮助用户快速、方便地创建高质量的数学公…

[图像处理] MFC OnMouseMove()绘制ROI矩形时的闪烁问题

文章目录 问题对策代码完整工程 结果使用Picture控件的RedrawWindow()的效果使用Dialog的RedrawWindow()的效果使用Picture控件的RedrawWindow(),ROI绘制到图像外的效果 结论 问题 最近想通过业余时间,写一个简单的图像处理软件,一点点学习图…

WEB前端-笔记

目录 一、字体 二、背景图片 三、显示方式 四、类型转换 五、相对定位 六、绝对定位 七、固定定位 八、Index 九、粘性定位 十、内边距 十一、外边距 十二、边框 十三、盒子尺寸计算问题 十四、清楚默认样式 十五、内容溢出 十六、外边距的尺寸与坍塌 十七、行…

YOLOv8 测试 5:Linux 中 Docker 部署 YOLOv8,Python 封装 API 接口,base64 图片处理

一、前言 记录时间 [2024-4-14] 系列文章简摘: Docker 学习笔记(二):在 Linux 中部署 Docker(Centos7 下安装 docker、环境配置,以及镜像简单使用) API 接口简单使用(二)…

树莓集团构建特色化3+3+1数字产业园运营体系

树莓集团构建的331数字产业园运营体系,是以三大服务体系、三大服务平台以及智慧园区服务为核心,为企业提供全生命周期服务,实现第五代数字化产业园区(基地、中心)的并网化运营。 这一运营体系的构建,标志着…

【MATLAB源码-第50期】基于simulink的BPSK调制解调仿真,输出误码率。

操作环境: MATLAB 2022a 1、算法描述 1. Bernoulli Binary: 这个模块生成伯努利二进制随机数,即0或1。这些数字表示要传输的原始数字信息。 2. Unipolar to Bipolar Converter: 此模块将伯努利二进制数据从0和1转换为-1和1,这是BPSK调制的…

硬件开发相关的流程文件介绍

学习目的:前面文章有简要介绍硬件开发的基本过程,本文会细分硬件开发的流程,然后分作5个步骤,详细介绍开发全过程,包括立项-实施项目-软件开发-测试-验收 这几个过程,然后,再分解对每一个步骤进…

poi-tl的使用(通俗易懂,全面,内含动态表格实现 包会!!)

最近在做项目时候有一个关于解析Html文件,然后将解析的数据转化成word的需求,经过调研,使用poi-tl来实现这个需求,自己学习花费了一些时间,现在将这期间的经验总结起来,让大家可以快速入门 poi-tl的介绍 …

Linux应用 select编程

1、概念 1.1 多路复用 在Linux中,多路复用是一种机制,用于同时监视多个文件描述符的状态,以便在其中任何一个文件描述符准备好进行读写操作时立即通知进程。常见的多路复用机制包括 select、poll 和 epoll。 1.2 select select 是一种用于…

【aws】在DBeaver上用终端节点连接Redshift

碎碎念 最近想要尝试redshift的一个叫做重新定位的功能,重新定位触发之后会停止当前的集群,转而在同一个区域的另一个可用区中启动一个一样的集群,这个过程视情况会花上10到60分钟不等。 但是目前项目中连接到redshift用的是私有ip&#xf…

C# Window form 自定义控件的结构和设计(三)

C# Window form 自定义控件的结构和设计(三) 一、前面介绍了如何来创建第一个自定义的控件,以及一个测试程序。下面我们来看下如何在自定义控件中添加属性。 C#和其他.NET语言支持属性作为语言的第一类成员。把属性作为语言的基础属性有两点主要的有点&#xff1a…

foreach无法修改数组值解决方案

效果展示: 解决办法: this.sportList.forEach((item,index) >{let that this;if(item.idinfo.id) {that.sportList[index].sportTime e.detail.value} }) 这里小编解释下,将this赋值给that通常是为了在回调函数或者异步代码中保持对Vu…

Android安卓开发 - 开发基础(二)

App的工程结构 本节介绍App工程的基本结构及其常用配置,首先描述项目和模块的区别,以及工程内部各目录与配置 文件的用途说明;其次阐述两种级别的编译配置文件build.gradle…

吴恩达2022机器学习专项课程(一) 第二周课程实验:特征工程和多项式回归(Lab_04)

目标 探索特征工程和多项式回归,使用线性回归来拟合非常复杂甚至非线性的函数。 1.为什么线性回归能拟合非线性函数? fxw*xb,属于线性回归的扩展,这个公式在数学中不属于线性,因为有x,而在机器学习中属于…

接口的三个常见使用案例

下面的三个案例,都是需要实现接口,才能进行的操作。 目录 1.比较对象大小 2.给对象排序 3.深浅拷贝 1.比较对象大小 1.1引入 (1)普通类型比较 (2)引入类型比较 发现报错,因为在Java中&…

如何理解Vue 3组件的component关键字

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

新质生产力与智能制造:推动制造业转型升级的双引擎

引言 随着科技的不断进步和全球制造业的快速发展,新质生产力与智能制造成为推动制造业转型升级的关键驱动力。新质生产力强调的是以科技创新和制度创新为核心,通过提高生产效率和经济效益来推动经济发展。而智能制造则是利用现代信息技术,实现…

window2012等显示桌面上面的【我的电脑】图标

服务器版本,登录进去,就留个垃圾桶在桌面上,一点也没有用处。 如何显示经典的“我的电脑”呢。 网络介绍了几种方法都木用。这种还点用: win图标点右键》运行: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,…

【系统分析师】计算机网络

文章目录 1、TCP/IP协议族1.1 DHCP协议1.2 DNS协议1.3网络故障诊断 2、网路规划与设计2.1逻辑网络设计2.2物理网络设计2.3 分层设计 3、网络接入3.1 接入方式3.2 IPv6地址 4、综合布线技术5、物联网5.1物联网概念与分层5.2 物联网关键技术 6、云计算7、网络存储技术&#xff08…