TCP/UDP/socket/InetAddress~Java网络(一)多线程

news/2024/5/18 12:07:44 标签: udp, java, tcp/ip

文章目录

    • TCP和UDP
      • TCP协议
      • UDP协议
      • InetAddress 类
    • Socket通信
    • 案例

java.net 包下使用的网络
IP地址使用4个字节 32位
一个字节的范围 0~255
ipv6 16个字节 128位

TCP和UDP

TCP协议

1、使用tcp协议前 必须先建立TCP连接 形成传输数据通道
2、传输前 采用三次握手的方式 可靠的
3、TCP协议进行通信的过长城应用进程:客户端 服务端
4、连接中 可以进行大数据量的传输
5、传输完毕 需释放已建立的连接 效率低

UDP协议

1、将数据、源、目的封装数据包 不需要建立连接
2、每个数据报的大小限制在64k内
3、因无需连接 故不可靠
4、发送的数据结束时 无释放资源 因为不是面向连接的 速度快

InetAddress 类

相关方法
1、获取本机InetAddress 对象 getLocalHost
2、根据指定主机名 / 域名获取ip地址对象getByName
3、获取InetAddress 对象的主机名 getHostName
4、获取InetAddress 对象的地址getHostAddress

也是序列化的对象
请添加图片描述

 public static void main(String[] args) throws UnknownHostException {
        //1、获取本机的InetAddress对现象
        InetAddress localhost = InetAddress.getLocalHost();
        System.out.println(localhost);
        //2、 根据指定的主机名获取InetAddress 对象
        InetAddress host1 = InetAddress.getByName("");
        System.out.println(host1);
        //3、根据返回InetAddress对象 比如百度对应的wwww.baidu.com对应的
        InetAddress host2 = InetAddress.getByName("www.baidu.com");
        System.out.println("host2="+host2;

        //4、通过InetAddress 对象 获取对应的地址
        String hosrAddress = host2.getHostAddress();

        //5、通过InetAddress 对象 获取对应的主机名 或者域名
        String hostName  = host2.getHostName();
    }

Socket通信

1、套节字开发 广泛应用与应用程序
2、通信的两端都需要有Socket 是两台机器之间通信的端点
3、网络通信 其实就是Socket间的通信
4、socket 允许程序把网络当成一个流 数据在两个socket之间通过IO传输
4、一般主动发起通信的应用沉痼属于客户端 等待通信请求的为服务端

案例

java">  public static void main(String[] args) throws Exception {
        //1、服务器在本机监听8888端口
        ServerSocket serverSocket = new ServerSocket(8888);
        //2、等待连接
        Socket socket = serverSocket.accept();
        //3、读取客户端发送的数据
        ///通过socket得到输入的流
        BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
        byte[] bytes = StreamUtils.streamToByteArray(bis);
        String destfilepath = "";
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destfilepath));

        bos.write(bytes);
        //关闭流
        bos.close();;
        bis.close();
        socket.close();
        serverSocket.close();
    }
java">public class StreamUtils {
    public static byte[] streamToByteArray(InputStream is) throws Exception{
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] b = new byte[1024];
        int len;
        while ((len=is.read(b))!=-1){
            bos.write(b,0,len);
        }
        byte[] array = bos.toByteArray();
        bos.close();
        return array;
    }
}
java">public class demo4 {
    public static void main(String[] args) throws Exception {
        //创建客户端连接服务器 得到socket对象
        Socket socket = new Socket(InetAddress.getLocalHost(), 8888);
        //创建读取磁盘文件的输入流
        String filepath = "";
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(""));
        //bytes就是filePath对应的字节数组
        byte[] bytes = StreamUtils.streamToByteArray(bis);
        //通过socket获取到输出流 将bytes数据发送给服务端
        BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
        bos.write(bytes); //将文件对应的字节数组的内容写入到数据通道中

        bis.close();
        socket.shutdownOutput(); //设置写入数据的结束标志
        //关闭相对应的流
        bos.close();
        socket.close();
    }
}

http://www.niftyadmin.cn/n/1279386.html

相关文章

快速学习-Spring5 的新特性

第3章 Spring5 的新特性[了解] 3.1 与 JDK 相关的升级 3.1.1 jdk 版本要求: spring5.0 在 2017 年 9 月发布了它的 GA(通用)版本。该版本是基于 jdk8 编写的,所以 jdk8 以下版本将无法使用。同时,可以兼容 jdk9 版本…

UDP网络通信-网络(二)多线程

文章目录netstat指令说明1、netstat -an 可以查看当前目前主机网络情况 包括端口监听情况和网络连接情况2、netstat -an| more 可以分页显示3、要求在dos控制台下执行UDP网络通信编程基本流程端口号netstat指令说明 1、netstat -an 可以查看当前目前主机网络情况 包括端口监听…

快速学习-SpringMVC 的基本概念

第1章 SpringMVC 的基本概念 1.1 关于三层架构和 MVC 1.1.1 三层架构 我们的开发架构一般都是基于两种形式,一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就是浏览器服务器。在 JavaEE 开发中,几乎全都…

Java多线程项目开始阶段

软件开发流程 通信系统 说明: 服务端: 1、当有客户端连接到服务器的时候 会得到一个socket 2、启动一个线程 该线程持有该socket对象 也就是说socket是该线程属性 3、为了更好的管理线程 需要时使用集合hashmap来进行管理 客户端: 1、和服务端…

快速学习-SpringMVC 的入门

第2章 SpringMVC 的入门 2.1 SpringMVC 的入门案例 2.1.1 前期准备 下载开发包&#xff1a; https://spring.io/projects 其实 spring mvc 的 jar 包就在之前我们的 spring 框架开发包中。 创建一个 javaweb 工程 创建一个 jsp 用于发送请求 JSP中的内容 <a href&qu…

快速学习-SpringMVC请求参数的绑定

第3章 请求参数的绑定 3.1绑定说明 3.1.1 绑定的机制 我们都知道&#xff0c;表单中请求参数都是基于 keyvalue 的。 SpringMVC 绑定请求参数的过程是通过把表单提交请求参数&#xff0c;作为控制器中方法参数进行绑定的。 例如&#xff1a; <a href"account/find…

☀️3万字mysql一篇过(有图,有案例)

文章目录sql语句分类Mysql的三层数据结构增删简单案例创建数据库创建一个名称为db01的数据库创建一个使用utf8字符集db02的数据库创建一个使用utf8字符集 并带校对规则db03 数据库*的表示含义查看删除数据库显示数据库创建语句删除数据库语句为了规避关键字 我们用反引号 解决备…

快速学习-SpringMVC常用注解

第4章 常用注解 4.1 RequestParam 4.1.1 使用说明 作用&#xff1a; 把请求中指定名称的参数给控制器中的形参赋值。 属性&#xff1a; value&#xff1a;请求参数中的名称。 required&#xff1a;请求参数中是否必须提供此参数。默认值&#xff1a;true。表示必须提供&…