【网络编程系列】网络编程实战

news2024/10/6 14:36:30

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

      • 1.InetAddress
      • 2.socket 套接字
      • 3.文件上传下载
      • 4.UDP
      • 5.chat
      • 6.双人交流
      • 7.URL

1.InetAddress

InetAddress常用方法如下:

public static void main(String[] args) throws Exception {
    //获取本机地址信息
    InetAddress localIp = InetAddress.getLocalHost();
    log.info("localIp.getCanonicalHostName()=" + localIp.getCanonicalHostName());//localhost
    log.info("localIp.getHostAddress()=" + localIp.getHostAddress());//127.0.0.1
    log.info("localIp.getHostName()=" + localIp.getHostName());//qinyingjiedeMacBook-Pro.local
    log.info("localIp.toString()=" + localIp.toString());//qinyingjiedeMacBook-Pro.local/127.0.0.1
    log.info("localIp.isReachable(5000)=" + localIp.isReachable(3000));//true
    //获取指定域名地址信息
    log.info("====================================");
    InetAddress baiduIp = InetAddress.getByName("www.baidu.com");
    log.info("baiduIp.getCanonicalHostName()=" + baiduIp.getCanonicalHostName());//14.119.104.189
    log.info("baiduIp.getHostAddress()=" + baiduIp.getHostAddress());//14.119.104.189
    log.info("baiduIp.getHostName()=" + baiduIp.getHostName());//www.baidu.com
    log.info("baiduIp.toString()=" + baiduIp.toString());//www.baidu.com/14.119.104.189
    log.info("baiduIp.isReachable(5000)=" + baiduIp.isReachable(5000));//false
    log.info("====================================");
    //获取指定原始IP地址信息
    InetAddress ip = InetAddress.getByAddress(new byte[]{127, 0, 0, 1});
    log.info("ip.getCanonicalHostName()=" + ip.getCanonicalHostName());//localhost
    log.info("ip.getHostAddress()= " + ip.getHostAddress());//127.0.0.1
    log.info("ip.getHostName()=" + ip.getHostName());//localhost
    log.info("ip.toString()=" + ip.toString());//localhost/127.0.0.1
    log.info("ip.isReachable(5000)=" + ip.isReachable(5000));//true
}

2.socket 套接字

客户端

public class Basic_001_Client {
    public static void main(String[] args) throws Exception {
        InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
        int port = 9999;
        Socket socket = new Socket(inetAddress, port);
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("你好".getBytes());
        outputStream.close();
        socket.close();
    }
}

服务端

@Slf4j
public class Basic_002_Server {
    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(9999);
        while (true) {
            Socket socket = serverSocket.accept();
            InputStream inputStream = socket.getInputStream();
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            final byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = inputStream.read(buffer)) != -1) {
                byteArrayOutputStream.write(buffer, 0, len);
            }
            log.info(byteArrayOutputStream.toString());
            byteArrayOutputStream.close();
            inputStream.close();
            socket.close();
        }
    }
}

3.文件上传下载

客户端

public class File_001_client {
    public static void main(String[] args) throws Exception {
        //1.创建一个socket
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
        //2.创建一个输出流
        OutputStream os = socket.getOutputStream();
        //3.文件流
        final FileInputStream fileIs = new FileInputStream("/Users/qinyingjie/Documents/idea-workspace/ant/ant-netty/src/main/java/Electron.png");
        //4.写出文件
        final byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = fileIs.read(buffer)) != -1) {
            os.write(buffer, 0, len);
        }
        //5.关闭资源
        fileIs.close();
        os.close();
        socket.close();
    }
}

服务端

public class File_002_server {
    public static void main(String[] args) throws Exception {
        //1.创建服务
        ServerSocket serverSocket = new ServerSocket(9000);
        //2.监听客户端连接
        Socket socket = serverSocket.accept();
        //3.获取输入流
        InputStream inputStream = socket.getInputStream();
        //4.文件输出
        FileOutputStream fileOut = new FileOutputStream("/Users/qinyingjie/Documents/idea-workspace/ant/ant-netty/src/main/java/receive.png");
        final byte[] buffer = new byte[1024];
        int len;
        while ((len = inputStream.read(buffer)) != -1) {
            fileOut.write(buffer, 0, len);
        }
        //5.关闭资源
        fileOut.close();
        inputStream.close();
        socket.close();
    }
}

4.UDP

udp 没有客户端服务端的概念,主要是为了演示

客户端

public class UDP_001_client {
    public static void main(String[] args) throws Exception {
        //1.创建一个socket
        DatagramSocket socket = new DatagramSocket();
        //2.建立一个包
        String msg = "你好";
        final InetAddress inetAddress = InetAddress.getByName("localhost");
        int port = 9090;
        DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, inetAddress, port);
        //3.发送
        socket.send(packet);
        //4.关闭资源
        socket.close();
    }
}

服务端

@Slf4j
public class UDP_002_server {
    public static void main(String[] args) throws Exception {
        //1.创建socket
        DatagramSocket socket = new DatagramSocket(9090);
        //2.接收数据包
        final byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
        socket.receive(packet);
        log.info(packet.getAddress().getHostAddress());
        log.info(new String(packet.getData(), 0, packet.getLength()));
        //3.关闭资源
        socket.close();
    }
}

5.chat

send 方

public class Chat_001_send {
    public static void main(String[] args) throws Exception {
        //1.创建一个socket
        DatagramSocket socket = new DatagramSocket(8888);
        //2.控制台输入
        final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        while (true) {
            final String data = reader.readLine();
            final byte[] datas = data.getBytes();
            final DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress("localhost", 6666));
            //3.发送
            socket.send(packet);
            if (StringUtils.equalsIgnoreCase(data, "bye")) {
                break;
            }
        }
        //4.关闭资源
        socket.close();
    }
}

receive 方

@Slf4j
public class Chat_002_receive {
    public static void main(String[] args) throws Exception {
        //1.创建socket
        DatagramSocket socket = new DatagramSocket(6666);
        while (true) { //2.接收数据包
            final byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
            socket.receive(packet);
            //断开连接 bye
            final byte[] data = packet.getData();
            final String receive = new String(data, 0, packet.getLength());
            log.info(receive);
            if (StringUtils.equalsIgnoreCase(receive, "bye")) {
                break;
            }
        }
        //3.关闭资源
        socket.close();
    }
}

6.双人交流

@Slf4j
public class TalkReceive implements Runnable {
    private DatagramSocket socket;
    private final int port;
    private final String msgFrom;

    @SneakyThrows
    public TalkReceive(int port, String msgFrom) {
        this.port = port;
        this.msgFrom = msgFrom;
        this.socket = new DatagramSocket(port);
    }

    @SneakyThrows
    @Override
    public void run() {
        //1.创建socket
        while (true) { //2.接收数据包
            final byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
            socket.receive(packet);
            //断开连接 bye
            final byte[] data = packet.getData();
            final String receive = new String(data, 0, packet.getLength());
            log.info(msgFrom + ": " + receive);
            if (StringUtils.equalsIgnoreCase(receive, "bye")) {
                break;
            }
        }
        //3.关闭资源
        socket.close();
    }
}
public class TalkSend implements Runnable {
    DatagramSocket socket;
    BufferedReader reader;
    private final int fromPort;
    private final String toIp;
    private final int toPort;

    public TalkSend(int fromPort, String toIp, int toPort) throws Exception {
        this.fromPort = fromPort;
        this.toIp = toIp;
        this.toPort = toPort;
        //1.创建一个socket
        this.socket = new DatagramSocket(fromPort);
        //2.控制台输入
        this.reader = new BufferedReader(new InputStreamReader(System.in));
    }

    @SneakyThrows
    @Override
    public void run() {
        while (true) {
            final String data = reader.readLine();
            final byte[] datas = data.getBytes();
            final DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(this.toIp, this.toPort));
            //3.发送
            socket.send(packet);
            if (StringUtils.equalsIgnoreCase(data, "bye")) {
                break;
            }
        }
        //4.关闭资源
        socket.close();
    }
}
public class TalkStuden {
    public static void main(String[] args) throws Exception {
        new Thread(new TalkSend(7777, "localhost", 9999)).start();
        new Thread(new TalkReceive(8888, "老师")).start();
    }
}
public class TalkTeacher {
    public static void main(String[] args) throws Exception {
        new Thread(new TalkSend(5555, "localhost", 8888)).start();
        new Thread(new TalkReceive(9999, "学生")).start();
    }
}

image-20230319123014292

image-20230319123025240

7.URL

@Slf4j
public class UrlDemo {
    public static void main(String[] args) throws Exception {
        final URL url = new URL("http://localhost:8080/helloworld/index.jsp?username=kuangshen&password=123");
        log.info(url.getAuthority());//localhost:8080
        log.info(url.getPath());///helloworld/index.jsp
        log.info(url.getProtocol());//http
        log.info(url.getHost());//localhost
        log.info(url.getFile());///helloworld/index.jsp?username=kuangshen&password=123
        log.info(url.getUserInfo());//null
        log.info(url.getQuery());//username=kuangshen&password=123
        log.info(url.getRef());//null
        log.info(String.valueOf(url.getDefaultPort()));//80
        log.info((String) url.getContent());
    }
}

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

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

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

相关文章

JavaScript【节流(throttle)、Navigator 对象、Screen 对象】(十七)

目录 节流(throttle) 实现 window 对象_属性 window 对象_方法

java+springboot+mysql企业产品销售管理系统

项目介绍: 使用javaspringbootmysql开发的企业产品销售管理系统,系统包含管理员,员工(客服)、客户角色,功能如下: 管理员:首页(销售统计);系统用…

IntelliJ IDEA 常用快捷键及重构必备(2023)

一、日常必备 快捷键介绍Ctrl F在当前文件进行文本查找 (必备)Ctrl R在当前文件进行文本替换 (必备)Ctrl Z撤销 (必备)Ctrl Q光标所在的变量 / 类名 / 方法名等上面(也可以在提示补充的时候…

开源项目-java内容管理系统

哈喽,大家好,今天给大家带来一个开源项目-java内容管理系统。项目基于SpringBoot+Vue3开发 内容管理系统由前,后台两部分组成。 前端主要有首页,新闻,图片,视频,下载,文库,产品等模块组成 后台主要有内容管理,互动管理,文件管理,配置管理,统计管理,用户管理,…

Python入门--需要学习哪些框架

Python是一门通用编程语言,支持很多不同的应用场景,因此,学习Python需要根据自己的实际需求来选择相应的框架。以下是几个常用的Python框架: Django:用于构建Web应用程序的全栈框架,包含了ORM、模板引擎等组…

[windows]MAT- 下载及安装

1. 下载安装包 1.1MAT下载链接: https://pan.baidu.com/s/1sUWPITSto8MjOrcF0BsJQg?pwd1111 提取码:1111 1.2MAT需要jdk17版本及以上支持,下载链接: https://pan.baidu.com/s/111jz90S4tie_48lQeExcZg?pwd1111 提取码:1…

碎片笔记|图数据与图神经网络基础介绍

前言:前段时间了解了一下图神经网络,本篇博客记录一下相关知识,以备不时之需。 强烈推荐这篇博客(作者来自 Google Research),个人认为是图神经网络基础入门的不二选择! 目录 一、图数据1.1 定义…

@RequestMapping 注解以及其它使用方式

😀前言 本篇主要讲解RequestMapping 注解以及其它使用方式 🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉&#…

SpringMVC之异常处理

SpringMVC之异常处理 异常分为编译时异常和运行时异常,编译时异常我们trycatch捕获,捕获后自行处理,而运行时异常是不可预期的,就需要规范编码来避免,在SpringMVC中,不管是编译异常还是运行时异常&#xff…

jenkins 连接服务器,提示Can‘t connect to server

在Jenkins 添加服务器时,提示 Cant connect to server,如图 搞了好久,不知道为什么不行~原来是行的,现在删了 新建一个也不行。

浅谈KNX总线技术在图书馆智能照明系统的应用

安科瑞 华楠 摘要:系统引入KNX总线实现的照明分布式智能控制,在提高馆所照明系统的节能效果、视觉效果和稳定性的基础上,展现了KNX总线部署便捷、扩充性强、可靠性高等自身要求,通过提升照明管理效率,营造了信息时代背…

蒙特卡洛树搜索(MCTS)在AlphaGo Zero中

蒙特卡洛树搜索(MCTS)在AlphaGo Zero中 一、说明 蒙特卡洛树(Monte Carlo Tree)是一种搜索算法,主要用于解决决策问题。它的核心思想是通过模拟游戏过程,评估各个节点的胜率,从而选择最优策略。…

dom靶场

靶场下载地址: https://www.vulnhub.com/entry/domdom-1,328/ 一、信息收集 获取主机ip nmap -sP 192.168.16.0/24netdiscover -r 192.168.16.0/24端口版本获取 nmap -sV -sC -A -p 1-65535 192.168.16.209开放端口只有80 目录扫描 这里扫描php后缀的文件 g…

cadence virtuoso GBW PM公式仿真

在virtuoso中用公式calculate的方法仿真单位增益带宽GBW和相位裕度 首先进行stb仿真 将增益曲线send to calculate,调用cross函数,threshold value设置为0,求0dB时的横坐标 GBW: 将相位曲线send to calculate,调用va…

TuyaOS 3.8.0操作系统新鲜出炉!IoT开发门槛再次被降低

作为降低物联网开发门槛的 TuyaOS 操作系统,此次迎来了重大更新!TuyaOS 3.8.0 新版本不仅更新了物联网各个板块的开发框架,还能实现与其他开发平台的无缝接入,致力于让开发者更轻松便捷地接入涂鸦 IoT PaaS。 TuyaOS 3.8.0 优化和…

等保案例 6

用户简介 江苏省监狱管理局是江苏省司法厅管理下的副厅级部门管理机构,是主管全省监狱工作的机关。随着信息化的发展,江苏省监狱管理局的监狱业务对网络和信息系统的依赖不断增加,网络流转的信息量不断增大,信息化建设的需求也日…

docker 第一章

目录 1.安装 docker 2.镜像、容器 3.总结 1.安装 docker 2.镜像、容器 3.总结 容器在 linux 上的本机运行,与其他容器共享主机的内核。它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量级。

Python基础教程:私有变量的访问和赋值教程

嗨喽~大家好呀,这里是魔王呐 ❤ ~! 首先我们这里先描述下: Python中,变量名类似__x__的,以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的(比如 doc, __i…

File Upload

File Upload 文件上传功能是大部分WEB应用的常用功能,网站允许用户自行上传头像、照片、一些服务类网站需要用户上传证明材料的电子档、电商类网站允许用户上传图片展示商品情况等。然而,看似不起眼的文件上传功能如果没有做好安全防护措施,…

Camunda 7.x 系列【17】BusinessKey

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 需求场景2. 案例演示2.1 创建请假申请2.2 启动流程2.3 流程关联业务查询2.4 业务关联流程…