Java学习笔记_Day37(网络编程)

网络编程:在网络通信协议下,不同计算机上运行的程序,进行的数据传输

常见的软件架构

C/S:在用户本地需要下载并安装客户端程序,在远程有一个服务器端程序

B/S:只需要一个浏览器,用户通过不同的网址,客户访问不同的服务器

BS的优缺点

  • 不需要开发客户端,只需要页面+服务端
  • 用户不需要下载,打开浏览器就能使用
  • 如果应用过大,用户体验收到影响

CS的优缺点

  • 画面精美,用户体验好
  • 需要开发客户端,也需要开发服务端
  • 用户需要下载和更新的时候太麻烦

网络编程三要素

IP:设备在网络中的地址,是唯一的标识

端口:应用程序在设备中唯一的标识

协议:数据在网络中传输的规则,常见的协议有UDP,TCP,http,https,ftp

1.常见的IP

IPv4:采用32位地址长度,分为4组,点分十进制表示法,总数有限,目前已经用完

127.0.0.1:本机IP,永远只会寻找当前所在本机

  • ipconfig:查看本机IP地址
  • ping:检查网络是否连通

InteAddress类:

IPv6:采用128位地址长度,分成8组,冒分十六进制表示法

2.端口号

两个字节表示的整数,取值范围:0~65535,我们自己使用1024以上的端口号就可以了

一个端口号只能被一个应用程序使用

3.协议

  1. UDP是面向无连接通信协议,速度快,有大小限制一次最多发送64K,数据不安全,容易丢失数据

UDP的三种通信方式:单播,组播,广播

  1. TCP是面向连接的通信协议,速度慢,没有大小限制,数据安全

UDP通信程序

1.发送数据

创建DatagramSocket对象

绑定端口:以后我们就是通过这个端口往外发送

空参:所有可用的端口随机一个进行使用

有参:指定端口号进行绑定

打包数据

释放资源

java 复制代码
public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket();
        String str="hello";
        byte[] buf=str.getBytes();
        InetAddress address=InetAddress.getByName("127.0.0.1");
        int port=10086;
        DatagramPacket dp=new DatagramPacket(buf, buf.length, address, port);
        ds.send(dp);
        ds.close();
    }

2.接受数据

创建DatagramSocket对象

在接受的时候一定要绑定端口,一定要和发送的端口保持一致

接受数据包

解析数据包

释放资源

java 复制代码
 public static void main(String[] args) throws IOException {
        DatagramSocket ds=new DatagramSocket(10086);
        byte[] buf=new byte[1024];
        DatagramPacket dp=new DatagramPacket(buf,buf.length);
        ds.receive(dp);
        byte[] msg=dp.getData();
        int len=dp.getLength();
        InetAddress ip=dp.getAddress();
        int port=dp.getPort();
        System.out.println("接受到数据"+new String(msg,0,len));
        System.out.println("该数据是从"+ip+port+"这个端口发出的");
        ds.close();
    }
相关推荐
Metaphor6922 小时前
使用 Python 合并 PDF 文件
java·python·pdf
我是无敌小恐龙2 小时前
Java SE 零基础入门Day03 数组核心详解(定义+内存+遍历+算法+实战案例)
java·开发语言·数据结构·人工智能·算法·aigc·动态规划
Byron__2 小时前
AI学习_03_LangChain_RAG基础概念
人工智能·学习·langchain
甘露寺2 小时前
深入理解并发模型:从 Python 的 async/await 到 Java 的虚拟线程与线程池机制
java·开发语言·网络
亚空间仓鼠2 小时前
网络学习实例:多网段企业网络部署
网络·智能路由器
x***r1512 小时前
Wireshark-4.4.2-x64安装步骤详解(附网络抓包与分析入门教程)
网络·测试工具·wireshark
HAWK eoni2 小时前
java进阶1——JVM
java·开发语言·jvm
HUGu RGIN2 小时前
Django视图与URLs路由详解
java