【Java寒假打卡】Java基础-网络编程UDP和TCP

news2024/11/26 12:42:16

【Java寒假打卡】Java基础-网络编程UDP和TCP

    • 网络编程的三要素
    • 网络编程的常见命令
    • InetAddress类
    • 端口
    • 协议
    • UDP发送数据
    • UDP接受数据
    • UDP通信程序的练习
    • TCP通信程序-发送数据
    • TCP通信程序-接受数据

网络编程的三要素

在这里插入图片描述

网络编程的常见命令

  • ipconfig 查看本机IP地址
  • ping IP地址: 检查网络是否联通
  • 127.0.0.1是回送地址,可以代表本机地址,一般用来测试使用

InetAddress类

InetAddress类是JAVA方便对ip地址的使用

在这里插入图片描述

package com.hfut.edu.test14;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class test3 {
    public static void main(String[] args) throws UnknownHostException {
        InetAddress address = InetAddress.getByName("DESKTOP-49VK0HU");// 获取改主机 通过主机名称

        // 获取此IPD地址的主机名
        String name = address.getHostName();

        // 获取IP地址的字符串
        String ip = address.getHostAddress();

        System.out.println("主机名" + name);
        System.out.println("IP地址" + ip);
    }
}

端口

在这里插入图片描述

协议

在这里插入图片描述

UDP发送数据

在这里插入图片描述

package com.hfut.edu.test14;

import java.io.IOException;
import java.net.*;

public class SendDemo {
    public static void main(String[] args) throws IOException {
        // 创建发送端的Socket对象
        // 创建数据 将数据打包
        // 调用DatagramSocket对象的方法发送数据
        // 关闭发送端
        DatagramSocket ds = new DatagramSocket();// 创建发送端对象

        //创建数据 将数据打包
        byte[] bys = "hello world".getBytes();
        int length = bys.length;// 计算字符串的长度
        InetAddress address = InetAddress.getByName("DESKTOP-49VK0HU");// 根据主机名获取

        // 设置端口
        int port = 10086;
        DatagramPacket dp = new DatagramPacket(bys,length,address,port);

        // 调用DatagramSocket对象的方法发送数据
        ds.send(dp);

        // 关闭发送端
        ds.close();// 关闭数据包套接字
    }
}


UDP接受数据

在这里插入图片描述

package com.hfut.edu.test14;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class receiveDemo {
    public static void main(String[] args) throws IOException {
        // 创建接收端对象Socket  绑定本机的指定端口
        DatagramSocket ds = new DatagramSocket(10086);

        // 创建数据包用于接受数据
        byte[] bys = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bys,bys.length);

        // 调用ds对象接受数据
        ds.receive(dp);

        // 接收数据
        byte[] datas = dp.getData();

        // 限制接受的字符串长度
        String s = new String(datas,0,dp.getLength());// 将字节数组作为参数  构造字符串

        System.out.println(s);

        ds.close();

    }
}

UDP通信程序的练习

在这里插入图片描述

发送端:

package com.hfut.edu.test15;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class Send {
    public static void main(String[] args) throws IOException {
        // 创建发送端Socket对象
        DatagramSocket ds = new DatagramSocket();
        // 将键盘录入的数据封装成缓冲流数据
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while((line = br.readLine()) != null){
            // 输入数据时886 结束循环
            if(line.equals("886")){
                break;
            }
            byte[] bys = line.getBytes();//将输入的字符串转换成字节数组
            // 封装数据
            DatagramPacket dp = new DatagramPacket(bys,bys.length, InetAddress.getByName("DESKTOP-49VK0HU"),1234);
            ds.send(dp);
        }
        ds.close();// 关闭发送端
    }
}


接收端:

package com.hfut.edu.test15;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class Receive {
    public static void main(String[] args) throws IOException {
        // 创建接收端的Socket对象
        DatagramSocket ds = new DatagramSocket(1234);

        while(true){
            // 创建数据包
            byte[] bys = new byte[1024];
            DatagramPacket dp= new DatagramPacket(bys,bys.length);// 接收数据包

            ds.receive(dp);// 接受数据

            // 解析数据包
            System.out.println("数据:" + new String(dp.getData(),0,dp.getLength()));
        }
//        ds.close();// 关闭接收端

    }
}


TCP通信程序-发送数据

在这里插入图片描述

在这里插入图片描述

package com.hfut.edu.test16;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.charset.StandardCharsets;

public class ClientDemo {
    public static void main(String[] args) throws IOException {
        // TCP 发送端数据

        // 创建客户端的套接字
        Socket s = new Socket(InetAddress.getByName("DESKTOP-49VK0HU"),10000);

        // 获取输出流  写数据
        OutputStream os = s.getOutputStream();
        os.write("hello world".getBytes());// 将字符串转换为字节数组  写入输出流

        // 释放资源
        s.close();
    }
}


TCP通信程序-接受数据

在这里插入图片描述

package com.hfut.edu.test16;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo {
    public static void main(String[] args) throws IOException {
        // 创建服务器的Socket对象
        ServerSocket ss = new ServerSocket(10000); 

        Socket s = ss.accept();// 侦听要连接到此套接字并且接受他

        // 获取输入流 读取数据 并把数据显示在控制台
        InputStream is = s.getInputStream();
        byte[] bys = new byte[1024];
        int len = is.read(bys);// 将输入流中的数据读入字节数组
        String data = new String(bys,0,len);
        System.out.println("数据:" + data);

        // 释放资源
        s.close();
        ss.close();

    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【系列03】方法的学习 方法重载 命令行传参 递归 简单计算机 [有目录]

方法的学习 什么是方法 方法是解决一类问题的步骤的有序组合包含于类或者对象之中方法在程序中被创建,在其他地方被引用 就比如输出方法如:System.out.println(); 就是被封装好的方法 方法设计原则:一个方法完成一个功能,利于后期扩展 [原子性] 使用方法: public class D…

vue中使用echarts 动态渲染数据

一、业务场景: 最近在vue中使用echarts时 引入的时候怎么也引不上,后面发现需要绑定在原型上就可以完美解决(也可以直接在需要引入的页面用ES5中的require引入require(‘echarts’)) 为了避免大家走弯路,下面整合了一下…

FLStudio水果21最新Daw (宿主软件)电音混音编曲制作工具

对许多音乐爱好者来说,从单独欣赏作品过渡到按自己的心情创作作品,是一种奇妙而令人高兴的体验。 音乐的编曲,特别是电子的编曲,Daw (宿主软件)是重要的要素。 编曲软件有很多。 “专业”这个词取决于你是否在行业的某个部分。 就…

MyBatis 详解 (1) -- 环境搭建、查询操作

MyBatis 详解 1 -- 环境搭建、查询操作一、MyBatis 是什么二、为什么学习 MyBatis三、MyBatis 查询3.1 前言3.2 创建数据库和表3.3 添加 MyBatis 框架支持添加 MyBatis 和 MySQL 驱动3.4 配置连接字符串 和 MyBatis3.4.1 配置连接字符串3.4.2 配置 MyBatis 中的 XML 路径3.5 添…

CSS造成阻塞的原理

目录 1.原理解析 A.webkit渲染过程 B.Gecko渲染过程 C.解析原理 接上篇文章CSS会造成阻塞吗? 我们来说一下CSS造成阻塞的原理 1.原理解析 那么为什么会出现上面的现象呢?我们从浏览器的渲染过程来解析下。 不用浏览器使用的内核不同&#xff0c…

leetcode 648. 单词替换【python3哈希集与两种字典树的方法的思考过程整理】

题目 在英语中,我们有一个叫做 词根(root) 的概念,可以词根后面添加其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。…

UI自动化测试模块与环境管理全面打通,MeterSphere开源持续测试平台v2.6.0发布

2023年1月16日,MeterSphere一站式开源持续测试平台正式发布v2.6.0版本。 在这一版本中,MeterSphere的UI自动化测试模块与环境管理全面打通,更好地满足了用户一个脚本同时跑多个环境的测试需求。在测试跟踪模块中,测试计划关联测试…

怎么系统的阅读文献

文章目录一、文献阅读1、综述类文献 review article2、研究类文章 research article3、方法学的文章第一部分 综述类文章的阅读第二部分 研究型文章的阅读a. 研究型论文结构b. 如何有选择阅读文献c. 如果整理笔记Citation和Reference的区别二、文献阅读工具1、Connected Papers…

python-while循环

文章目录一、程序的三种结构二、while循环1.1:死循环1.2:循环计数习惯案例1.3:循环计数2.0:break终止循环3.0:人造死循环4.0:continue5.0循环嵌套一、程序的三种结构 1:顺序 代码自上而下执行 …

四旋翼无人机学习第20节--PCB自动保存文件labview设计

0 前言 在设计PCB的过程中,通常一个项目的的PCB文件只有一个,如果保存完文件后想要回滚到自己的版本是比较难的,虽然allergo软件可以设置autosave功能来自动对PCB文件进行备份,但是备份文件只会保存最后一次的版本。 1 labview编…

JavaWeb基础(二) HTTP、Tomcat、Servlet介绍

JavaWeb基础(二) HTTP、Tomcat、Servlet介绍 1,Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网,也称为万维网(www),能够通过浏览器访问的网站。 在我们日常的生活中,经常会使用浏览器去访问百度、京东、传智官网等这些网站&a…

Dubbo调用

Dubbo调用 0. 概述 Dubbo 服务调用过程比较复杂,包含众多步骤,比如发送请求、编解码、服务降级、过滤器链处理、序列化、线程派发以及响应请求等步骤。 1. 客户端发送请求时序图 InvokerInvocationHandler.invoke 1. 对于Object中的方法toString, has…

IDEA常用配置整理说明

文章目录IDEA常用配置整理说明1、 IDE配置1.1 设置相关1.1.1 忽略大小写开关1.1.2 取消单行显示tabs的操作1.1.3 项目文件编码1.1.4 滚轴修改字体大小1.1.5 设置显示行号和方法间的分隔符1.1.6 新建类头注释信息1.1.7 JavaDoc注释(就是方法上加的注释)1.…

蓝桥杯:整数分解

题目链接 问题描述 答案提交 本题答案:691677274345。 思路分析 问题描述 将 3 分解成两个正整数的和, 有两种分解方法, 分别是312 和 321 。注意顺序不同算不同的方法。 将 5 分解成三个正整数的和, 有 6 种分解方法, 它们是 113 122 131 212 221 311。…

WebSocket长连接接入支付宝消息服务,实现消息通知

大家好,我是小悟 在对接支付宝开放平台的一些常用功能时,常常需要收到支付宝的回调通知结果,才能处理业务逻辑。此文介绍通过WebSocket长连接接入支付宝消息服务,实现消息通知。 包括五部分内容:问题、优势、配置、代…

Spring3.*中ASM和JDK8版本冲突问题及解决方案

1. 问题描述 Spring3.* 中ASM版本较低,不支持对 JDK8 class文件进行操作,启动时报错。 Tomcat报错 org.springframework.asm.MethodVisitor.visitParameter2. 问题原因 Spring使用ASM类库操作Java class文件,Spring.* 依赖的ASM类库版本比…

右键万能格式转换工具

格式转换是很多小伙伴都会用到的东西,无论是视频、音频还是文档等格式,其实做这方面的软件有很多,比如之前一直在用的格式工厂,蛮好用的。后面用到了ABC工具箱,(这款软件批量处理图片会很方面)界…

故障分析 | 库表名-大小写不规范,运维两行泪

作者:刘聪 爱可生华东交付服务部 DBA 成员,专职 MySQL 故障处理及相关技术支持。座右铭:好好学习,天天向上。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系…

【博客589】K8s Topology Spread Constraints

K8s Topology Spread Constraints 场景 你可以使用 拓扑分布约束(Topology Spread Constraints) 来控制 Pod 在集群内故障域之间的分布, 例如区域(Region)、可用区(Zone)、节点和其他用户自定义…

带你从概念到服务对象,解读商业智能BI

数据在当前时代已然成为了重要的战略资源,但数据资产却并不是每个企业都能利用。数据本身并没有太多意义,规模小还好,一旦规模量变大,人们就难以理解其中的含义。所以讲数据资产价值化,使其转化为信息和知识成为了企业…