网络编程的应用

news/2024/9/19 14:03:12 标签: java

目录

1.单机程序和网络程序

2.客户端与服务端

3.网络编程三要素

3.1  IP地址

3.2  port端口

4.TCP编程

5.UDP编程


1.单机程序和网络程序

  • 之前编写的程序都是单机程序,所有的业务功能实现及数据存储都在一个主机上完成,我们称为单机程序

  • 我们在生活中使用的绝大多数的程序(应用,软件,app),都可以基于网络,与其他主机的程序进行数据交互,又不同的主机程序完成不同的业务功能。

2.客户端与服务端

  • 在编写网络程序时,一般都会至少涉及两部分内容

  • 客户端 : 主动发起连接的那个程序,就称为客户端程序。

  • 服务端 : 接收连接信号的程序,就称为服务端程序。

3.网络编程三要素

3.1  IP地址

  • 在网络环境中,每一个主机都会有一个唯一的网络标识,我们称为ip(地址)

  • 在网络中可以通过ip,找到唯一的一个主机

  • ip标识的格式规范

    • IPV4 : 32bit,平均分成4分,来表示ip , 每一份8bit , 0~255

    • IPV6 : 128bit,平均分成6分,每一份使用16进制的数字来表示

  • 使用本机ip地址

    • 在cmd中,使用ipconfig命令,查看当前主机在局域网中的ip地址

    • 如果连接本机,可以使用 localhost 或 127.0.0.1

3.2  port端口

  • 计算机上运行的每一个程序,都会拥有一个(物理)端口

  • 端口的作用就是实现程序内部与外部的数据通讯的。

  • 随着程序启动,系统会自动的为程序的物理端口,分配一个数字标识,称为逻辑端口

    • 在编写网络程序时,我们也可以手动为程序指定逻辑端口号

  • 逻辑端口的数字范围 0~65535 , 其中0~1023 多作为系统程序的端口

  • 如果一个程序的逻辑端口号,与另一个程序的逻辑端口号相同,我们称为端口号冲突

  • 只能启动一个程序。

3.3  通讯协议

使用的通讯协议有两种

  • TCP : 一种安全型协议,能够包装数据传输的安全性,也就是能够保证双方一定能收到数据

    通过3次握手,确保双方的网络是联通

    通过4次挥手,确保双发的连接是断开的。

  • UDP : 一种不专注于数据安全传输的协议。适合广播,音频信息的传播。

4.TCP编程

Java中提供了ServerSocket对象,可以充当服务端

public static void main(String[] args) throws IOException {
    //启动了一个可以充当服务端的Java程序
    ServerSocket server = new ServerSocket(6666);
}

Java中提供了Socket对象,可以充当客户端

 public static void main(String[] args) throws IOException {
     //启动了一个可以充当客户端的Java程序
     Socket client = new Socket("192.168.28.173" , 6666);
 }

服务端程序启动后,需要等待客户端的连接

//等待客户端的连接,在等待过程中,当前线程会处于阻塞状态
//一旦客户端连接了,该方法会返回一个Socket对象
Socket client = server.accept();




public static void main(String[] args) throws IOException {
        //启动了一个可以充当服务端的Java程序
        ServerSocket server = new ServerSocket(6666);

        System.out.println("======启动服务器========");
        //等待客户端的连接
        Socket link = server.accept();

        System.out.println("收到了【"+link.getInetAddress()+"】客户端的连接");
    }
  • 一旦客户端和服务端产生了连接,接下来双方的交互都是基于Socket对象的。

  • 两端的数据交互,最终是基于网络IO

  • Socket可以提供用于网络读写数据的IO流

InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();

注意:与文件io读取操作不同,网络数据没有一个明确的结束。

当使用is.read()无法读取到数据时,默认不会获得-1,而是会阻塞等待

所以在使用网络io读写数据时,要提供一个结束标识,可以有两种方式

方式一:在a端使用socket.shutdownOutput(),在b端通过-1结束

方式二:在a端额外传递一个结束字符串os.write("[over]".getBytes())

在b端读取到结束字符串时就可以结束了。

5.UDP编程

  • 编程语法上没有区分客户端对象和服务端对象 (逻辑上依然存储分别)

  • 只要是UDP网络编程中的一个主机端,就需要创建 DatagramSocket

    //如果当前的主机端作为逻辑服务端,需要指定端口
    //如果当前的主机端作为逻辑客户都安,是否指定端口都可以。
    DatagramSocket socket = new DatagramSocket(6666);
    DatagramSocket socket = new DatagramSocket();

  • UDP的数据传输,需要额外的一个对象 DatagramPacket

  • 读写数据都需要依赖这个对象

java">//发数据时的packet构建,此时数组中要装有发送的内容
String str = "buka is good" ;
byte[] bs = str.getBytes();
DatagramPacket p = new DatagramPacket(
    bs , 0 , bs.length,
    InetAddress.getByName("localhost"),8888
);

//收数据时的packet构建,此时数组是一个空数组
byte[] bs = new byte[1024];
DatagramPacket p = new DatagramPacket(
    bs , 0 , bs.length
);
  • 实现数据包的发送和接收

java">//发送方发送数据
socket.send(p);

//接收接收数据,并获得发送方的一些信息(ip + port)
socket.receive(p);
String str = new String(p.getData(), 0, p.getLength());
System.out.println("收到来自【"+p.getSocketAddress()+":"+p.getPort()+"】的消息:" + str);

http://www.niftyadmin.cn/n/5665660.html

相关文章

【Vue】- 路由及传参

文章目录 知识回顾前言源码分析1. 声明式导航2. 路由传参3. 可选符4. 重定向5. 4046. 跳转及传参7. 路由懒加载拓展知识总结router-link静态传参和动态路由的对比知识回顾 前言 什么是单页面应用程序? ● 所有功能在一个html页面上实现 单页面应用优缺点? ● 优点:按需更新…

普罗米修斯监控

概念 prometheus是开源的系统监控和告警。在k8s分布式的容器化管理系统当中,一般都是搭配prometheus来进行监控。它是服务监控系统,也可以监控主机,它自带时序数据库,这个时序数据库提供了数据模型和采集的指标项、存储、查询接口…

基于Springboot+vue的音乐网站

随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了音乐网站的开发全过程。通过分析音乐网站管理的不足,创建了一个计算机管理音乐网站的方案。文章介绍了音乐网站的系统分析部分,包括可行性分析…

【网络】传输层协议TCP

TCP协议 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。TCP在IP(Internet Protocol,互联网协议)网络层上提供…

go的学习笔记

中文标准库文档:https://studygolang.com/pkgdoc 第一段代码 所有代码的主文件都是main.go,下面的代码直接在项目里面创建main.go运行 package main // 声明文件所在的包,每个go文件必须有归属的包import "fmt" // 引入程序需要的包,为了使用包下的函数,比如Print…

网页打开时,下载的文件svg+xml类型有什么作用?

‌SVG文件在网页设计中的主要作用包括清晰度、多功能性、较小的文件大小以及可访问性和包容性。‌ ‌清晰度‌:SVG文件可以无限扩展,这意味着您可以根据需要调整其大小而不会失去清晰度。与光栅图像相比,SVG文件在放大时不会出现模糊或颗粒感…

AI绘画与摄影新纪元:ChatGPT+Midjourney+文心一格 共绘梦幻世界

文章目录 一、AI艺术的新时代二、ChatGPT:创意的引擎与灵感的火花三、Midjourney:图像生成的魔法与技术的奇迹四、文心一格:艺术的升华与情感的共鸣五、融合创新:AI绘画与摄影实战的无限可能六、应用场景与实践案例AI艺术的美好未…

kafka消息发送几种方式

同步发送 or 异步发送 消息发送根据是否需要处理发送的结果分为同步发送、异步发送。 同步发送:等待发送结果返回,这种方式是可靠的,因为异常能及时处理,但同步发送需要阻塞等待一条消息发送完才处理下一条,吞吐量差。…