首页 > 编程语言 >java网络编程

java网络编程

时间:2023-07-31 16:37:41浏览次数:31  
标签:DatagramPacket java String 编程 bytes 网络 new ds dp

java 网络编程

网络编程三要素

ip地址

​ 设置在网络中的地址,是唯一标识

端口

​ 应用程序在设置种的唯一标识

协议

​ 数据在网络种传输的规则,常见的协议有UDP和TCP协议

ip

ipv4

ipv6

IPv4 :4个字节 1100000000 .... 太难记忆了变成10进制 192.168.1.166

运用了 点分10进制

image-20201001230125439

IPv6:

点分16进制

image-20201001230227782

InetAddress ip

image-20201001231112837

端口

应用程序在设置种的唯一标识

协议

链接和通信的规则被称为网络通信协议

UDP

​ 用户数据报协议

​ UDP是面向 无连接 通信协议

​ 速度快,大小一次最多64K,数据不安全,容易丢失数据

TCP

​ 传输控制协议

​ Tcp 协议是面向链接的通信协议

​ 速度慢,没有大小限制,数据安全

UDP

UDP 三种传播方式

单播

一对一

组播

一对组

范围( 224.0.0.0 到 239.255.255.255)

广播

一对所有

广播地址:255.255.255.255

单播

client

public static void main(String[] args) throws IOException {
    //创建数据报对象
    DatagramSocket ds = new DatagramSocket();
    //封装发送数据
    byte[] bytes = "hello world".getBytes();
    int lenth = bytes.length;
    InetAddress inetAddress = InetAddress.getByName("localhost");
    int port = 10000;
    DatagramPacket dp = new DatagramPacket(bytes,lenth,inetAddress,port);
    //发送数据
    ds.send(dp);
    System.err.println("数据发送完成");
    //释放资源
    ds.close();
}

server

public static void main(String[] args) throws IOException {

    //创建接收报包
    DatagramSocket ds = new DatagramSocket(10000);
    //创建接收包
    byte[] bytes = new byte[1024];
    DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
    //接收数据包
    ds.receive(dp);
    //打印数据
    System.err.println(new String(bytes,0,dp.getLength()));
    //释放资源
    ds.close();

}

组播

client

public static void main(String[] args) throws IOException {
    //创建报包对象
    DatagramSocket ds = new DatagramSocket();
    //创建数据包
    InetAddress inetAddress = InetAddress.getByName("224.0.0.1");
    byte[] bytes = "hello 组播".getBytes();
    int length = bytes.length;
    int port = 10000;
    DatagramPacket dp = new DatagramPacket(bytes,length,inetAddress,port);
    //发送数据包
    ds.send(dp);
    //释放资源
    ds.close();;
}

server

public static void main(String[] args) throws IOException {

    //创建接收报包
    MulticastSocket ms = new MulticastSocket(10000);
    byte[] bytes = new byte[1024];
    //封装数据
    DatagramPacket dp = new DatagramPacket(bytes, 1024);
    // 把当前计算机  绑定倒组播地址
    ms.joinGroup(InetAddress.getByName("224.0.0.1"));
    //准备接收请求
    ms.receive(dp);
    System.err.println(new String(bytes,0,dp.getLength()));
    //释放资源
    ms.close();
}

广播

广播地址 255.255.255.255 唯一

client

public static void main(String[] args) throws IOException {
    //创建数据报对象
    DatagramSocket ds = new DatagramSocket();
    //封装发送数据
    byte[] bytes = "广播 hello world".getBytes();
    int lenth = bytes.length;
    InetAddress inetAddress = InetAddress.getByName("255.255.255.255");
    int port = 10000;
    DatagramPacket dp = new DatagramPacket(bytes,lenth,inetAddress,port);
    //发送数据
    ds.send(dp);
    System.err.println("数据发送完成");
    //释放资源
    ds.close();
}

server

public static void main(String[] args) throws IOException {

    //创建接收报包
    DatagramSocket ds = new DatagramSocket(10000);
    //创建接收包
    byte[] bytes = new byte[1024];
    DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
    //接收数据包
    ds.receive(dp);
    //打印数据
    System.err.println(new String(bytes,0,dp.getLength()));
    //释放资源
    ds.close();
}

TCP

原理:

TCP 通信是一种可靠的网络协议,它在通信的网络各建立一个Socket对象

通信之前要保证连接已建立

通过Socket产生IO流来进行网络通信

应用

client

public static void main(String[] args) throws IOException {

    //建立一个socket对象
    Socket socket = new Socket("127.0.0.1",10000);

    // 获取一个IO流开始写数据
    OutputStream os = socket.getOutputStream();
    os.write("hello worold 你好,我是tcp client ".getBytes());
    os.flush();

    //释放资源
    os.close();
    socket.close();

}

server

public static void main(String[] args) throws IOException {

    //创建服务socket对象
    ServerSocket ss = new ServerSocket(10000);
    //等待客户端连接
    Socket accept = ss.accept();
    //获得输入流
    InputStream is = accept.getInputStream();
    byte[] bytes = new byte[1024];
    int l = -1;
    while( (l = is.read(bytes)) != -1){
        System.err.println(new String(bytes,0,l));
    }
    //释放资源
    is.close();
    ss.close();

}

tcp 原理分析

image-20201002004346011

三次握手

​ 建立连接的时候 需要三次握手,证明安全性

image-20201002004434918

四次挥手

终止连接时,需要用到四次挥手

保证成功终止链接

image-20201002004942461

练习 TCP

image-20201002005428193

image-20201002010251829

image-20201002010313728

tcp 练习2

上传文件 成功给出反馈

image-20201002010643649

image-20201002010800008

image-20201002010822561

标签:DatagramPacket,java,String,编程,bytes,网络,new,ds,dp
From: https://www.cnblogs.com/lccsdncnblogs/p/17593770.html

相关文章

  • java常见的排序算法(冒泡排序、选择排序、插入排序、shell排序、归并排序、堆排序、快
    文章目录一、冒泡排序1、效率表现和适用范围2、算法实现二、选择排序1、效率表现和适用范围2、算法实现三、插入排序1、效率表现和适用范围2、算法实现四、shell排序1、效率表现和适用范围2、算法实现五、归并排序1、效率表现和适用范围2、算法实现六、快速排序1、效率表现和适用......
  • java 代理(静态代理、动态代理的不同实现)详解及示例
    文章目录一、代理构成1、代理介绍2、应用场景介绍二、静态代理1、示例1)、售票服务2)、售票3)、代售点服务4)、静态代理实现1、maven依赖2、实现三、动态代理1、InvocationHandler角色2、InvocationHandler的作用3、JDK的动态代理创建机制----通过接口1)、Proxy2)、InvocationHandler3)......
  • 2、【java线程及线程池系列】synchronized、ReentrantLock和ReentrantReadWriteLock介
    java线程及线程池系列文章1、【java线程及线程池系列】java线程及线程池概念详解2、【java线程及线程池系列】synchronized、ReentrantLock和ReentrantReadWriteLock介绍及示例3、【java线程及线程池系列】线程池ThreadPoolExecutor的类结构、使用方式示例、线程池数量配置原则和......
  • 2、【java程序运行监控byteman】使用示例(运行中方法耗时监控、javaagent监控、jvm监控
    文章目录一、统计方法耗时(程序运行中)1、创建示例类2、建立监控1)、获取运行程序的进程号2)、建立监控3、编制脚本4、检测脚本5、提交脚本6、验证7、卸载脚本二、其他示例1、javaagent示例(程序未运行)1)、创建示例类2)、编译及测试3)、编制脚本4)、运行脚本5)、测试2、监控jvm的类1)、创建......
  • javascript实现浏览器端大文件分块上传
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • 探究: 编程和英语试卷的奇妙关系
    很多时候,专业的计算机人士在讨论计算机问题的时候,总在讨论这个实现的原理是什么,这个如何实现,如何更好地实现,如果榨干计算机硬件的性能来实现某个功能活着需求,但是,对于跨学科,跨领域的问题,却很少讨论和涉及,如果你问他们,他们多半会敷衍的回答,没有这样的需求,没有这样的......
  • C#.NET 国密SM4对称加解密 与JAVA互通 ver:20230731
    C#.NET国密SM4对称加解密与JAVA互通ver:20230731 .NET环境:.NET6控制台程序(.netcore)。JAVA环境:JAVA8,带maven的JAVA控制台程序。 简要解析:1:加密的KEY、明文等输入参数都需要string转byte[],要约定好编码,如:UTF8。2:加密后的输出参数:byte[],在传输时需要转为stri......
  • linux 2 网络基础
    1.包裹函数对服务器客户端等函数进行报错处理以及简化处理比如bindinttcp4bind(shortport,constchar*IP){structsockaddr_inserv_addr;intlfd=Socket(AF_INET,SOCK_STREAM,0);bzero(&serv_addr,sizeof(serv_addr));if(IP==NULL){//......
  • JDK 版本异常导致 flutter doctor --android-licenses 出错 (class file version 61.0
    flutterdoctor--android-licensesError:AJNIerrorhasoccurred,pleasecheckyourinstallationandtryagainExceptioninthread"main"java.lang.UnsupportedClassVersionError:com/android/sdklib/tool/sdkmanager/SdkManagerClihasbeencompil......
  • 一位大咖写给软件编程新手的建议
    按笔者的理解,不管你是否科班出身,需要从入门到精通开始进行学习并且进行实践,在实践中去积累和总结经验,这样才能够提高自己的编程认知和思维方式。此博文只是笔者现在的一些建议,后面如果有新的亮点那再补充完善。1、 理解需求;编码之前必须先理解需求,知道你需要做什么,然......