Java中的网络编程

文章目录

    • 网络基础知识
      • IP 地址
      • 端口
      • 协议
    • Java 中网络编程
      • InetAddress(静态类)
      • UDP 通信原理
        • UDP 发送数据步骤
        • UDP 接收数据步骤
        • UDP 发送接收案例
      • TCP 通信原理
        • TCP 发送数据步骤
        • TCP 接收数据步骤
        • TCP 发送接收案例

网络基础知识

  • 概述:在网络通信协议下(http/tcp/udp)实现网络互连的不同计算机上运行的程序间可以进行数据交换。

  • 网络编程中的三要素:

    名字作用
    IP 地址网络中设备的唯一标识
    端口应用程序的标识
    协议对数据的传输格式、传输速率、传输步骤做了统一的规定,通信双方必须同时遵守才能完成数据交换,常见协议有(TCP UDP)

IP 地址

  • 常见的 IP 地址

    • IPV4

      • 给每个连接在网络上的主机分配一个 32 bit (位)的地址,按照 TCP/IP 规定,IP 地址使用二进制表示,每个 IP 地址 32bit ,也就是 4 个字节(1字节=8位)

      • 十进制形式(点分十进制表示法):192.168.1.66

      • 二进制表示形式: 11000000.10101000.00000001.01000010

    • IPV6

      • 采用 128 bit , 16个字节一组,分成 8 组十六进制数据,解决了网络地址资源数量不够的问题。
  • 关于IP的一些命令(命令运行框使用)

    命令作用
    ipconfig查看本机IP地址
    ping IP 地址检查网络是否连通
  • 特殊的 IP 地址

    • 127.0.0.1 回送地址,可以代表本机地址,常用来测试
    • 例如(本地地址):
      • 127.0.0.1/demo/login.html
      • localhost/demo/login.html

端口

  • 端口号
    • 用两个字节表示的整数,它的取值范围是0~65535
    • 其中0~1023之间的端口号用于一些知名的网络服务和应用
    • 普通应用程序需使用1024以上的端口号,如果端口号被占用,会导致当前程序启动失败

协议

  • UDP协议

    1、用户数据报协议(User Datagram Protocol)
    2、UDP是无连接通信协议,发送端和接收端不会建立逻辑连接
    3、由于UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频、普通数据的传输
    4、由于UDP的面向无连接性,不能保证数据的完整性,因此传输重要数据不建议使用
  • TCP协议

    1、传输控制协议(Transmission Control Protocol)
    2、TCP协议是面向连接的通信协议,传输数据前,发送端和接收端建立逻辑连接,然后再传输数据
    3、提供两台计算机之间可靠无差错的数据传输,TCP中必须明确客户端与服务器端,三次握手
    4、保证数据传输的安全,上传文件,下载文件,浏览网页等
    5、三次握手:TCP协议中,在发送数据的准备阶段,客户端和服务器之间的三次交互,以保证可靠连接


Java 中网络编程

InetAddress(静态类)

  • 概述:为了方便我们对IP地址的获取和操作,Java提供了一个类 InetAddress 供我们使用。InetAddress : 表示Internet协议(IP)地址

  • 常用方法

    方法作用
    static InetAddress getByName(String host)确定主机名称的IP地址。
    主机名称可以是机器名称,也可以是IP地址
    String getHostName()获取此IP地址的主机名
    String getHostAddress()返回文本显示中的IP地址字符串
  • 代码演示

    • 首先 win + r ,输入 cmd 打开命令运行框

    • 输入 ipconfig,找到 IPV4 地址(红框圈住的就是主机名称)

    public class Test {public static void main(String[] args) throws UnknownHostException {// 使用 InetAddress类,调用方法,获取本机对象InetAddress lh = InetAddress.getByName("xiaoHeng");// 调用方法,获取此IP地址的主机名String hostName = lh.getHostName();// 调用方法,返回文本显示中的IP地址字符串String hostAddress = lh.getHostAddress();System.out.println("本机名称是:" + hostName);System.out.println("本机地址是:" + hostAddress);}
    }
    

    注意:代码演示的,换成自己主机名后,输出的 本地地址,就和 命令运行框 查看的 IPV4 地址一致


UDP 通信原理

  • 概述:UDP是一种不可靠的网络协议,它在通信两端各建立一个 Socket 对象,但是这两个 Socket 只是发送,接收数据的对象
  • DatagramSocket 基于UDP协议的Socket
UDP 发送数据步骤
  1. 创建发送端的 Socket 对象(DatagramSocket)

    DatagramSocket ds = new DatagramSocket();
    
  2. 创建数据,并把数据打包

    byte[] bys = "你好".getBytes();				// 将字符串转换成 字节数组
    DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("ip"),int port);
    
  3. 调用 DatagramSocket 对象的方法发送数据

    void send(DatagramPacket p);
    
  4. 关闭发送端

    void close();
    
UDP 接收数据步骤
  1. 创建接收端的 Socket 对象(DatagramSocket)

    DatagramSocket(int port);						// 根据端口号
    
  2. 创建一个数据包,用于接收数据

    DatagramPacket(byte[] bys , int length);
    
  3. 调用 DatagramSocket 对象方法接收数据

    void receive(DatagramPacket dp);
    
  4. 解析数据包,并展示在控制台

    byte[] getData();											// 数据缓冲区
    int getLength();											// 实际数据长度
    String s = new String(dp.getData(),0,dp.getLength());		// 转换成字符串
    
  5. 关闭接收端

    void close();
    
UDP 发送接收案例
  • 使用 UDP 协议,发送 “你好,世界!你好,中国!”,用接收端接收,并展示在控制台上?

    • 发送端(再开启服务端)
    // 发送端
    public class Client {public static void main(String[] args) throws IOException {// 1、创建发送端的 Socket 对象DatagramSocket ds = new DatagramSocket();// 2、创建数据,并将数据打包byte[] bys = "你好,世界!你好,中国!".getBytes();DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("127.0.0.1"), 8080);// 3、调用 DatagramSocket 对象发送数据ds.send(dp);// 4、关闭发送端ds.close();}
    }
    
    • 接收端(先开启接收端)
    // 接收端
    public class Server {public static void main(String[] args) throws IOException {// 1、创建接收端的 Socket 对象DatagramSocket ds = new DatagramSocket(8080);// 2、创建一个数据包,用于接收数据byte[] bys = new byte[1024];DatagramPacket dp = new DatagramPacket(bys , bys.length);// 3、调用 DatagramSocket 对象方法接收数据ds.receive(dp);// 4、解析数据包,并展示在控制台byte[] data = dp.getData();int length = dp.getLength();String s = new String(data ,0,length);System.out.println(s);// 5、关闭接收端ds.close();}
    }
    

TCP 通信原理

  • 概述:TCP可靠的网络协议,在通信两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信

  • Java为客户端提供了Socket类,为服务器端提供了ServerSocket类

  • Java对基于TCP协议的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信

TCP 发送数据步骤
  1. 创建客户端 Socket 对象(Socket)

    Socket(String host , int port);				// host:主机号 port:端口号
    
  2. 获取输出流,写数据

    OutputStream getOutputStream();
    
  3. 释放资源

    void close();
    
TCP 接收数据步骤
  1. 创建服务器端的Socket对象(ServerSocket)

    ServerSocket(int port);
    
  2. 监听客户端连接,返回一个 Socket 对象

    Socket accept();
    
  3. 获取输入流,读数据,并把数据显示在控制台上

    InputStream getInputStream();
    
  4. 释放资源

    void close();
    
TCP 发送接收案例
  • 使用 TCP 协议,建立客户端和服务端连接,在客户端使用键盘输入随机文字,显示在服务端控台上?IO 流可参考这篇文章

    • 服务端(接收数据,先打开服务端)
    public class Server {public static void main(String[] args) throws IOException {// 1、创建服务器端对象(端口号,随意)ServerSocket ss = new ServerSocket(8080);// 2、监听客户端连接Socket a = ss.accept();// 3、获取输入流,读数据,将数据展示在控制台上InputStream is = a.getInputStream();byte[] bys = new byte[1024];int len;while((len = is.read(bys)) != -1){System.out.println(new String(bys,0,len));}// 4、释放资源ss.close();}
    }
    
    • 客户端(发送数据,再打开客户端)
    public class Client {public static void main(String[] args) throws IOException {// 1、创建客户端 对象Socket s = new Socket("127.0.0.1",8080);// 2、获取输出流,写数据OutputStream os = s.getOutputStream();// 3、创建键盘输入对象Scanner sc = new Scanner(System.in);System.out.print("请输入你想要发送的内容:");String data = sc.next();// 4、利用输出流写数据os.write(data.getBytes());// 5、释放资源s.close();}
    }
    
    • 运行结果


欢迎大家留言,一起进入编程世界!

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

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

相关文章

限流式保护器在户外汽车充装的应用

摘 要:国家标准GB51348-2019中规定储备仓库、电动车充电等场所的末端回路应设置限流式电气防火保护器。电气防火限流式保护器可以有效克服传统断路器、空气开关和监控设备存在的短路电流大、切断短路电流时间长、短路时产生的电弧火花大,以及使用寿命短等…

鱼哥赠书活动第⑥期:《内网渗透实战攻略》看完这本书教你玩转内网渗透测试成为实战高手!!!!

鱼哥赠书活动第⑥期:《内网渗透实战攻略》 如何阅读本书:本书章节介绍:本书大致目录:适合阅读对象:赠书抽奖规则:往期赠书福利: 当今,网络系统面临着越来越严峻的安全挑战。在众多的安全挑战中&…

14:00面试,14:07就出来了,问的问题有点变态。。。

前言 刚从小厂出来,没想到在另一家公司我又寄了。 在这家公司上班,每天都要加班,但看在钱给的比较多的份上,也就不太计较了。但万万没想到一纸通知,所有人不准加班了,不仅加班费没有了,薪资还…

EndNote20 下载与安装详细教程

扫描文末二维码,关注微信公众号:ThsPool 后台回复 a004 ,免费领取 EndNote20下载安装包 EndNote是一款备受欢迎的文献管理软件,被数百万研究人员、学生和图书管理员广泛使用。它提供便捷的方式来扩展各种语言的参考书目&#xff0…

并发程序设计--D11D12进程间通信

概念:就是进程和进程之间交换信息。 常用通信方式 无名管道(pipe) 有名管道 (fifo) 信号(signal) 共享内存映射(mmap) 套接字(socket) 过时的IPC通信方式 System…

ChatGPT扩展系列之网易数帆ChatBI

在当今数字化快速发展的时代,数据已经成为业务经营与管理决策的核心驱要素。无论是跨国大企业还是新兴创业公司,正确、迅速地洞察数据已经变得至关重要。然而,传统的BI工具往往对用户有一定的技术门槛,需要熟练的操作技能和复杂的查询语句,这使得大部分的企业员工难以深入…

【Flutter 开发实战】Dart 基础篇:从了解背景开始

想要学会用 Flutter 开发 App,就不可避免的要学习另一门很有意思的编程语言 —— Dart。很多小伙伴可能在学习 Flutter 之前可能都没听说过这门编程语言,我也是一样,还以为 Dart 是为了 Flutter 而诞生的;然而,当我们去…

计算机网络(2)

计算机网络(2) 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 计算机网络和因特网(2)分组交换网中的时延、丢包和吞吐量时延丢包吞吐量总结 协议层次及其服务模型模型类型OSI模型分析TCP/IP模型分析 追溯历史 小程一言 我…

2024年 快速搭建自己AI Gemini API 搭建完整

先看下效果 体验效果 Gemini 前言 12月7日消息,谷歌12月6日宣布推出其认为规模最大、功能最强大的人工智能模型Gemini。Gemini将包括三种不同的套件:Gemini Ultra,Gemini Pro和Gemini Nano。 谷歌表示,该公司备受期待的人工智能…

YB2412L 18V 2A 500KHz 同步降压稳压器

YB2412L 18V 2A 500KHz 同步降压稳压器 概述: YB2412L是一种高频、同步、整流、降压、开关模式转换器 移动组。它提供了一个非常紧凑的解决方案,以实现一个2A连续输出电流在一个广泛的输入供应 范围,具有良好的负荷和线路调节。 YB2412L需…

【FPGA/verilog -入门学习17】vivado 实现串口自发自收程序

1,需求 PC使用串口助手给FPGA板发送9600 波特率的数据,FPGA板接收到数据后,回复同样的数据给PC 2,需求分析 按模块可以划分为: rx接收模块,将输入的8位并行rx 数据转换成[7:0]rx_data 信号,当…

设计模式之外观模式【结构型模式】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某…

小游戏实战丨基于Tkinter的五子棋小游戏

文章目录 写在前面Tkinter五子棋系列文章写在后面 写在前面 本期内容:基于tkinter的五子棋小游戏 下载地址:https://download.csdn.net/download/m0_68111267/88700190 实验环境 python3.11及以上pycharmtkinter Tkinter Tkinter是Python的一个标准…

C#,归并排序算法(Merge Sort Algorithm)的源代码及数据可视化

归并排序 归并算法采用非常经典的分治策略,每次把序列分成n/2的长度,将问题分解成小问题,由复杂变简单。 因为使用了递归算法,不能用于大数据的排序。 核心代码: using System; using System.Text; using System.Co…

phpstudy面板Table ‘mysql.proc‘ doesn‘t exist解决办法

原因分析:误删了mysql数据库 解决办法如下: 1、停止服务 2、先把mysql文件夹下的data文件夹备份,因为data文件里存有数据库文件。然后再删除data文件。 3、cmd管理员命令进入到mysql中的bin目录下 ,执行mysqld --initialize-…

视频监控系统EasyCVR如何通过调用API接口查询和下载设备录像?

智慧安防平台EasyCVR是基于各种IP流媒体协议传输的视频汇聚和融合管理平台。视频流媒体服务器EasyCVR采用了开放式的网络结构,支持高清视频的接入和传输、分发,平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联…

Linux Debian12系统gnome桌面环境默认提供截屏截图工具gnome-screenshot

一、简介: 在Debian12中系统gnome桌面环境默认提供一个截图捕获工具screenshot,可以自定义区域截图、屏幕截图、窗口截图和录制视频,截图默认保存在“~/图片/截图”路径下。 可以在应用程序中搜索screenshot,如下图: 也可以在桌面右上角找到…

【揭秘APT攻击】——内网渗透实战攻略,带你领略网络安全的绝密世界!

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 介绍 什么是内网? 什么是内网渗透? 内网渗透的目的: 内网…

数据挖掘在制造业中的预测与优化应用

随着大数据时代的到来,数据挖掘技术在各行各业的应用日益广泛,尤其在制造业中,其对于提升生产效率、降低运营成本、优化供应链管理等方面发挥着不可替代的作用。本文将探讨数据挖掘在制造业中的预测与优化应用,通过深入剖析实际案…

RockMQ面试题(1)

为什么要使用MQ 应用解耦:系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流 系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单…