java网络编程概述及例题

news2024/11/25 22:33:06

网络编程概述

计算机网络

把分布在不同地理区域的计算机与专门的外部设备用通信线路连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。

网络编程的目的

直接或间接地通过网络协议与其他计算机实现数据交换,进行通讯。

网络编程中的两个主要问题

1、如何准确地定位网络上一台或多台主机:定位主机上的特定的应用。
2、找到主机后如何可靠高效地进行数据传输。

网络编程中的两个要素

对应问题一:IP和端口号。
对应问题二:提供网络通信协议:TCP/IP参考模型(应用层、传输层、网络层、物理+数据链路层)。

网络通信协议

在这里插入图片描述

IP与端口号

什么是 IP ?

在这里插入图片描述

什么是端口号?

在这里插入图片描述

InetAddress类

在java中使用InetAddress类代表IP

域名: www.baidu.com
	域名-->DNS-->本机hosts-->网络服务器
	通过域名访问,先DNS解析,找本机hosts件中的地址是否存在,不存在,同各国网络服务器查找
本地回路地址:127.0.0.1 对应着:localhost
实例化InetAddress两个方法:getByName(String host),getLocalHost()
			 两个常用方法:getHostName(),getHostAddress()
public static void main(String[] args) {
        try {
            //获取一个InetAddress对象,InetAddress构造器私有化,故无法调用构造器。
            InetAddress inet1 = Inet4Address.getByName("192.168.233.2");
            System.out.println(inet1);//   /192.168.233.2

            InetAddress inet2 = InetAddress.getByName("www.baidu.com");
            System.out.println(inet2);//  www.baidu.com/61.135.169.125

            InetAddress inet3 = InetAddress.getByName("127.0.0.1");
            System.out.println(inet3);//  /127.0.0.1
            //获取本机IP
            InetAddress localHost = InetAddress.getLocalHost();
            System.out.println(localHost);// DESKTOP-K49TTDJ/192.168.146.1 局域网本地地址 与127.0.0.1一样

            //getHostName():获取域名
            System.out.println(inet2.getHostName());//www.baidu.com

            //getHostAddress():获取IP地址
            System.out.println(inet2.getHostAddress());// 61.135.169.125

        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

TCP协议与UDP协议

区别

在这里插入图片描述

TCP三次握手,四次挥手

在这里插入图片描述
在这里插入图片描述

TCP实例1

/**
 * 实现TCP网络编程
 * 例子1:客户端发送信息给服务端,服务端将数据显示在控制台上
 * @author JIANGJINGWEI
 * @create 2020-05-09-13:49
 */
public class TCTest1 {
    //客户端
    @Test
    public void client()  {
        Socket socket = null;
        OutputStream os = null;
        try {
            //1.创建Socket对象,指明服务器端的IP和端口号
            socket = new Socket(InetAddress.getByName("127.0.0.1"),888);
            //2.获取一个输出流,用于输出数据
            os = socket.getOutputStream();
            //3.写出数据操作
            os.write("你好世界!".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //4.资源关闭
                if(os != null){
                    os.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if(socket !=null){
                    socket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
    //服务端
    @Test
    public void server()  {
        ServerSocket ss = null;
        Socket socket = null;
        InputStream is = null;
        ByteArrayOutputStream baos = null;
        try {
            //1.创建服务器端的ServerSocket,指明自己的端口号,IP是默认的主机IP
            ss = new ServerSocket(888);
            //2.调用accept()表示接收来自于客户端的socket
            socket = ss.accept();
            //3.获取输入流
            is = socket.getInputStream();
            //不建议可能会有乱码
//        byte[] buffer  = new byte[5];
//        int len;
//        while((len = is.read(buffer)) != -1){
//            String str = new String(buffer,0,len);
//            System.out.print(str);
//        }
            //4.读取输入流中的数据
            baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[5];
            int len;
            while((len = is.read(buffer)) != -1) {
                baos.write(buffer,0,len);//将数据写入到ByteArrayOutputStream的数组
            }
            System.out.println(baos.toString());
            System.out.println("收到了来自于"+socket.getInetAddress().getHostAddress()+"的数据");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //5.资源关闭
            if(baos != null){
                try {
                    baos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
            if (is != null){

                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (socket != null){

                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (ss != null){

                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


    }
}

TCP实例2


/**
 * 实现TCP的网络编程
 * 例题2:客户端发送文件给服务器,服务端将文件保存在本地。
 * 异常需要用trycatch,此处简写
 * @author JIANGJINGWEI
 * @create 2020-05-09-14:20
 */
public class TCTest2 {
    @Test
    public void client() throws IOException {
        Socket socket = new Socket(InetAddress.getLocalHost(), 9090);
        OutputStream os = socket.getOutputStream();
        FileInputStream fis = new FileInputStream(new File("网络通信协议.png"));
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1){
            os.write(buffer,0,len);
        }
        fis.close();
        os.close();
        socket.close();
    }
    @Test
    public void server() throws IOException {
        ServerSocket ss = new ServerSocket(9090);

        Socket socket = ss.accept();

        InputStream is = socket.getInputStream();
        FileOutputStream fos = new FileOutputStream(new File("网络通信协议1.png"));
        byte[] buffer = new byte[1024];
        int len;
        while((len = is.read(buffer)) != -1){
            fos.write(buffer,0,len);
        }
        fos.close();
        is.close();
        socket.close();
        ss.close();

    }
}

TCP实例3

/**
 * 实现TCP的网络编程
 * 例题3:从客户端发送文件给服务端,服务端保存到本地,并返回“发送成功”给客户端。
 * 异常处理应选用trycatch
 * @author JIANGJINGWEI
 * @create 2020-05-09-14:34
 */
public class TCTest3 {
    @Test
    public void client() throws IOException {
        Socket socket = new Socket(InetAddress.getLocalHost(), 9091);
        OutputStream os = socket.getOutputStream();
        FileInputStream fis = new FileInputStream(new File("网络通信协议.png"));
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1){
            os.write(buffer,0,len);
        }
        //表示数据已经传完
        socket.shutdownOutput();//如果没有此操作,服务器端会不断的接受数据,从而服务器端接收操作一下的代码不会执行
        //接受服务器端的数据并显示
        InputStream is = socket.getInputStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer1 = new byte[5];
        int len1;
        while((len1 = is.read(buffer)) != -1) {
            baos.write(buffer,0,len1);//将数据写入到ByteArrayOutputStream的数组
        }
        System.out.println(baos.toString());
        is.close();
        baos.close();
        fis.close();
        os.close();
        socket.close();
    }
    @Test
    public void server() throws IOException {
        ServerSocket ss = new ServerSocket(9091);

        Socket socket = ss.accept();

        InputStream is = socket.getInputStream();
        FileOutputStream fos = new FileOutputStream(new File("网络通信协议2.png"));
        byte[] buffer = new byte[1024];
        int len;
        while((len = is.read(buffer)) != -1){
            fos.write(buffer,0,len);
        }
        //服务器端给客户端的反馈
        OutputStream os = socket.getOutputStream();
        os.write("数据已收到".getBytes());
        os.close();
        fos.close();
        is.close();
        socket.close();
        ss.close();

    }
}

UDP实例

public class UDTest1 {
    //发送端
    @Test
    public void sender() throws IOException {
        
        DatagramSocket socket = new DatagramSocket();

        String str = "UDP发送数据";
        byte[] data = str.getBytes();
        InetAddress inet = InetAddress.getLocalHost();
        //将数据包装到packet里
        DatagramPacket Packet = new DatagramPacket(data,0,data.length,inet,9090);
        socket.send(Packet);

    }
    //接收端
    @Test
    public void receiver() throws IOException {
        DatagramSocket socket = new DatagramSocket(9090);
        byte[] buffer = new byte[100];
        DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
        socket.receive(packet);

        System.out.println(new String(packet.getData(),0,packet.getLength()));
        socket.close();

    }
}

URL

什么是URL?

在这里插入图片描述

URL类常用方法

public class URLTest1 {
    public static void main(String[] args) throws MalformedURLException {
        URL url = new URL("https://www.bilibili.com/video/BV1Kb411W75N?p=629");
        System.out.println(url.getProtocol());//获取协议明
        System.out.println(url.getHost());//获取主机名
        System.out.println(url.getPort());//获取端口号
        System.out.println(url.getPath());//获取文件路径
        System.out.println(url.getFile());//获取文件名
        System.out.println(url.getQuery());//获取查询名

    }
}

URL实例tomcat数据下载

将tomcat服务器启动后运行一下代码

public class URLTest2 {
    public static void main(String[] args)  {
        HttpURLConnection urlConnection = null;
        InputStream is = null;
        FileOutputStream fos = null;
        try {
            URL url = new  URL("https://localhost:8080/examples/aa.png");
            //获取连接对象
            urlConnection = (HttpURLConnection) url.openConnection();
            //获取连接
            urlConnection.connect();
            is = urlConnection.getInputStream();
            fos = new FileOutputStream( "day01\\aaa.png");
            byte[] buffer = new byte[1024];
            int len;
            while ((len = is.read(buffer)) != -1){
                fos.write(buffer,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null){

                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (is != null){

                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (urlConnection != null){
                //关闭连接
                urlConnection.disconnect();
            }
        }
    }
}

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

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

相关文章

每天一道leetcode:剑指 Offer 53 - II. 0~n-1中缺失的数字(适合初学者二分查找)

今日份题目: 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 示例1 输入: [0,1,3] 输出: 2 示例2 …

Linux 信号signal处理机制

Signal机制在Linux中是一个非常常用的进程间通信机制,很多人在使用的时候不会考虑该机制是具体如何实现的。signal机制可以被理解成进程的软中断,因此,在实时性方面还是相对比较高的。Linux中signal机制的模型可以采用下图进行描述。 每个进程…

网络编程——数据报的组装和拆解

数据包的组装和拆解 一、数据包在各个层之间的传输 二、各个层的封包格式 1、链路层封包格式 -------------------------------------------------------------------------------------------------------------------------------------- | 目标MAC地址(6字节&a…

Chatgpt AI newbing作画,文字生成图 BingImageCreator 二次开发,对接wxbot

开源项目 https://github.com/acheong08/BingImageCreator 获取cookie信息 cookieStore.get("_U").then(result > console.log(result.value)) pip3 install --upgrade BingImageCreator import os import BingImageCreatoros.environ["http_proxy"]…

一、Webpack相关(包括webpack-dev-server用以热更新和html-webpack-plugin)

概念与功能: webpack是前端项目工程化的具体解决方案。它提供了友好的前端模块化开发支持,以及代码压缩混淆、处理浏览器端JavaScript的兼容性、性能优化等强大的功能。 快速上手:隔行变色 -S实际是--save的简写,表示安装的第三方…

Mysql存储引擎InnoDB

一、存储引擎的简介 MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE 等。 1、InnoDB存储引擎 从MySQL5.5版本之后,默认内置存储引擎是InnoDB,主要特点有: (1)灾难恢…

分享21年电赛F题-智能送药小车-做题记录以及经验分享

这里写目录标题 前言一、赛题分析1、车型选择2、巡线1、OpenMv循迹2、灰度循迹 3、装载药品4、识别数字5、LED指示6、双车通信7、转向方案1、开环转向2、位置环速度环闭环串级转向3、MPU6050转向 二、调试经验分享1、循迹2、识别数字3、转向4、双车通信5、逻辑处理6、心态问题 …

Zabbix网络拓扑配置

一、简介 网络拓扑功能是一项非常重要的功能,它可以直观展示网络设备主机状态及端口传输速率等指标信息,帮助运维人员快速发现和定位故障问题;Zabbix同样配备了强大的网络拓扑功能,如何使用Zabbix拓扑图功能创建一个公司网络拓扑…

VMware Workstation及CentOS-7虚机安装

创建新的虚机: 选择安装软件(这里选的是桌面版,也可以根据实际情况进行选择) 等待检查软件依赖关系 选择安装位置,自主配置分区 ​​​​​​​ 创建一个普通用户 安装完成后重启 点击完成配置,进入登陆界面…

mysql 笔记(一)-mysql的架构原理

mysql体系结构 mysql Server 架构自顶向下大致可以分为网络连接层,服务层,存储引擎和系统文件层.体系架构图如下: 网络连接层提供与mysql服务器建立的支持.常见的java.c.python/.net ,它们通过各自API技术与mysql建立连接. 服务层是Mysql Server 的核心,主要包含系统管理和控…

linux Ubuntu 更新镜像源、安装sudo、nvtop、tmux

1.更换镜像源 vi ~/.pip/pip.conf在打开的文件中输入: pip.conf [global] index-url https://pypi.tuna.tsinghua.edu.cn/simple按下:wq保存并退出。 2.安装nvtop 如果输入指令apt install nvtop报错: E: Unable to locate package nvtop 需要更新一下apt&a…

容灾备份服务器怎么样?

容灾备份服务器是一种用于保护信息系统的设备,它可以在系统出现故障时提供备用服务。容灾备份服务器通常包括两个部分:容灾和备份。容灾是指在遭遇灾害时能保证信息系统能正常运行,帮助企业实现业务连续性的目标。备份是为了应对灾难来临时造…

MemFire教程|FastAPI+MemFire Cloud+LangChain开发ChatGPT应用-Part2

基本介绍 上篇文章我们讲解了使用FastAPIMemFire CloudLangChain进行GPT知识库开发的基本原理和关键路径的代码实现。目前完整的实现代码已经上传到了github,感兴趣的可以自己玩一下: https://github.com/MemFire-Cloud/memfirecloud-qa 目前代码主要…

了解JavaSpring

什么是Spring? Spring开发方向:分布式,微服务,网站 Spring技术(全家桶):Spring Framework、Spring boot、Spring Cloud Spring Framework(4.x) 是spring体系中最基础…

盛元广通基于信息平台的医学实验室综合管理系统

医学实验室的飞速发展,为医学科研、突发传染病防治、服务基层医疗等方面提供了有效助力,实验室注重实际应用的研究和实际问题的解决,实验室管理能力也在逐步迈向一个新的台阶,利用信息化技术手段实现对实验室开放共享的有效管理&a…

【Spring Boot】拦截器与统一功能处理

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE进阶 上一篇文章我们讲解了Spring AOP是一个基于面向切面编程的框架,用于将某方面具体问题集中处理,通过代理对象来进行传递,但使用原生Spring AOP实现统一的…

搭建本地开发服务器

搭建本地开发服务器 :::warning 注意 在上一个案例的基础上添加本地开发服务器,请保留上个案例的代码。如需要请查看 Webpack 使用。 ::: 搭建本地开发服务器这一个环节是非常有必要的,我们不可能每次修改源代码就重新打包一次。这样的操作是不是太繁琐…

linux文本三剑客---grep,sed,awk

目录 grep 什么是grep? grep实例演示 命令参数: 案例演示: sed 概念: 常用选项: 案例演示: awk 概念: awk常用命令选项: awk变量: 内置变量 自定义变量 a…

代理模式(C++)

定义 为其他对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。。 应用场景 在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等)直接访问会给使用者、或…

出现Error: Cannot find module ‘compression-webpack-plugin‘错误

错误: 解决:npm install --save-dev compression-webpack-plugin1.1.12 版本问题