网络编程,IO流

news2024/11/27 7:40:45

网络编程
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

1.网络通信的要素
通信双方的地址:ip,端口号
IP就是一个电脑节点的网络物理地址,端口是该计算机逻辑通讯接口。IP和端口号组成了你的网络地址
网络通信的协议


重点:传输层TCP/UDP

2.ip地址
127.0.0.1  本机localhost
ip地址的分类
ipv4  127.0.0.1     四个字节  0-255 ,42亿
ipv6  128位,8个无符号整数
公网(互联网)/私网(区域网) :ABCD类(了解即可)

3.端口
计算机一个程序的进程,不同的进程不同的端口号,用于区分软件,单个协议下端口号不能重合
规定为0-65535
TCP,UDP
端口分类
公有0-1023 http:80
程序注册端口:2014-49151   MySQL:3306
动态,私有 :49152-65535
查询:netstat -ano #查询所有端口,netstat -ano|findstr"" #查询特定端口

4.通信协议
TCP/IP协议簇
重要:TCP:用户传输协议,UDP:用户数据协议
TCP:连接,稳定,三次握手,四次挥手,客户端,服务端,传输完成释放链接效率低


UDP:不连接,不稳定,客户端与服务端没有明确的界限

5.TCP实现聊天

服务端

package neww;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

//服务端
public class TcpServerDemo01 {
    public static void main(String[] args) {
        ServerSocket serverSocket=null;
        Socket socket=null;
        InputStream is=null;
        ByteArrayOutputStream baos=null;
        try {
            //首先有一个地址
             serverSocket = new ServerSocket(9999);
            //等待客户端连接
            socket=serverSocket.accept();
            //读取客户端信息
             is= socket.getInputStream();
            //管道流
            baos = new ByteArrayOutputStream();
            byte[] buffer=new byte[1024];
            int len;
            while((len=is.read(buffer))!=-1){
                baos.write(buffer,0,len);
            }
            System.out.println(baos.toString());
        }catch (IOException e) {
            e.printStackTrace();
        }finally {
            //关闭资源
            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(serverSocket!=null) {
                try {
                    serverSocket.close();
                }catch (IOException e){
                    e.printStackTrace();;
                }
            }
        }
    }
}

客户端

import org.omg.CORBA.UNKNOWN;

import java.io.IOException;
import java.io.OutputStream;
import java.io.StringReader;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

//客户端
public class TcpClientDemo01 {
  public static void main(String[] args){
      Socket socket=null;
      OutputStream os=null;
      try{
          //要知道服务器的地址
          InetAddress serverIP=InetAddress.getByName("127.0.0.1");
          //端口号
          int port=9999;
          //创建一个socket连接
          socket=new Socket(serverIP,port);
          //发送消息IO流
          os=socket.getOutputStream();
          os.write("你好".getBytes());

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

6.TCP文件上传实现

服务端

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServerDemo02 {
    public static void main(String[] args)throws Exception{
        //1.创建服务
        ServerSocket serverSocket=new ServerSocket(9000);
        //2.监听客户端的连接
        Socket socket=serverSocket.accept();   //阻塞式监听
        //3.获取输入流
        InputStream is=socket.getInputStream();
        //4.文件输出
        FileOutputStream fos = new FileOutputStream(new File("receive.jpg"));
        byte[] buffer = new byte[1024];
        int len;
        while((len= is.read(buffer))!=-1){
           fos.write(buffer,0,len);
        }
        //5.通知客户端我接受完毕
        OutputStream os=socket.getOutputStream();
        os.write("我接受完毕,可以断开".getBytes());
        //6.关闭资源
        fos.close();
        is.close();
        socket.close();
        serverSocket.close();
    }
}

客户端

package neww;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class TcpClientDemo02 {
    public static void main(String[] args) throws Exception{
        //创建一个Socket连接
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
        //创建一个输出流
        OutputStream os = socket.getOutputStream();
        //读取文件
        FileInputStream fis = new FileInputStream(new File("1.jpg.jpg"));
        //写出文件
        byte[] buffer=new byte[1024];
        int len;
        while((len=fis.read(buffer))!=-1){
            os.write(buffer,0,len);
        }
        //通知服务器我已经传输完
        socket.shutdownOutput();
        //确定服务器接受完毕,断开连接,管道流
        InputStream inputStream=socket.getInputStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer2=new byte[1024];
        int len2;
        while((len2=inputStream.read(buffer2))!=-1){
            baos.write(buffer2,0,len2);
        }
        System.out.println(baos.toString());

        //关闭资源
        baos.close();
        inputStream.close();
        fis.close();
        os.close();
        socket.close();
    }
}

8.UDP消息发送
不需要连接,只需要知道对方地址

服务端

import com.sun.org.apache.xpath.internal.operations.String;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpserverDemo01 {
    //还要等待客户端连接
    public static void main(String[] args) throws Exception{
        //开放端口
        DatagramSocket socket = new DatagramSocket(9090);
        //接受数据包
        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
        socket.receive(packet); //阻塞接受
        System.out.println(packet.getAddress().getHostAddress());
      System.out.println(packet.getData().toString());
        //关闭连接
        socket.close();
    }
}

客户端

package neww;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

//不需要建立服务器
public class UdpClientDemo01 {
    public static void main(String[] args) throws Exception{
        //1.建立一个socket
        DatagramSocket socket =new DatagramSocket();
        //2.建立一个包
        String msg="你好,服务器";
        //发送给谁
        InetAddress localhost =InetAddress.getByName("localhost");
        int port=9090;
        DatagramPacket packet=new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,port);
        //发送包
        socket.send(packet);
        //关闭流
        socket.close();
    }
}

9.UDP聊天

sender

package chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

public class UdpSenderDemo01 {
    public static void main(String[] args) throws Exception{
        DatagramSocket socket=new DatagramSocket(8888);
        //准备数据,控制台读取System.in
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        while(true) {
            String data = reader.readLine();
            byte[] datas = data.getBytes();
            DatagramPacket packet = new DatagramPacket(datas, 0, datas.length,new InetSocketAddress("localhost",6666));
            socket.send(packet);
        }

    }
}

receieve

package chat;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpReceieveDemo01 {
    public static void main(String[] args) throws Exception{
        DatagramSocket socket=new DatagramSocket(6666);
        while(true){
            byte[] container =new byte[1024];
            DatagramPacket packet=new DatagramPacket(container,0,container.length);
            socket.receive(packet); //阻塞式接包
            //断开连接
            byte[] data= packet.getData();
            String receiveData =new String(data, 0, data.length);
            System.out.println(receiveData);
            if(receiveData.equals("bye")){
                break;
            }
        }
        socket.close();
    }
}

IO流
掌握InputStream和Reader,OutputStream和Writer
以及转换流

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

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

相关文章

程序环境和预处理(下)——“C”

各位CSDN的uu们你们好呀,今天小雅兰的内容是程序环境和预处理的下篇知识点,那么,这篇博客写完后,C语言的知识点就到这里就结束啦,后续会专注于刷题和读书,也是关于C语言的,会写一些数据结构和C的…

本地Linux服务器安装宝塔面板,并内网穿透实现公网远程登录

文章目录前言1. 安装宝塔2. 安装cpolar内网穿透3. 远程访问宝塔4. 固定http地址5. 配置二级子域名6. 测试访问二级子域名转发自CSDN远程穿透的文章:Linux安装宝塔,并实现公网远程登录宝塔面板【内网穿透】 前言 宝塔面板作为建站运维工具,它…

尚融宝17-用户身份认证的三种模式

目录 1、单一服务器模式 2、SSO(Single Sign On)模式 3、Token模式 1、单一服务器模式 即只有一个服务器,用户通过输入账户和密码,提交表单后服务器拿到前端发送过来的数据查询数据库是否存在该用户,其一般流程如下…

【分享】体验微软Bing在线绘图功能

哈喽,大家好,我是木易巷~ 木易巷体验了一下子微软Bing在线绘图功能,快来看看吧~ 简单介绍 New Bing 不了解或者没有注册New Bing的小伙伴可以看看这一篇: 【教程】你现在还不知道微软的New Bing?你out了&#xff0…

【NestJs】使用MySQL关联查询

上一篇文章介绍了NestJs使用MySQL创建多个实体,接下来讲到的则是实体创建完毕之后,开始进行查询。里面可能涉及到nestjs使用语法,要是不知道的小伙伴可以先行了解,也可以模仿写,后面我会继续出nestjs的教程。也欢迎大家…

SpringMVC的基本使用-------基本注解RequestMapping、基本数据类型绑定、参数绑定、POJO类型绑定

SpringMVC的三层架构和MVC SpringMVC简介 三层架构概述: 一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就是浏览器服务器。在 JavaEE 开发中,几乎全都是基于 B/S 架构的开发。那么在 B/S 架构中&#…

时间序列信号阈值降噪方法,有什么可以创新的地方吗?

可以换个空间,从图域的角度进行分析,比如图傅里叶变换,图小波变换等图时频分析方法。图小波阈值降噪的基本思想是通过将时间序列信号转换成路图信号,再利用图小波变换分解成尺度函数系数和一系列对应不同尺度的谱图小波系数&#…

VAE 理论推导及代码实现

VAE 理论推导及代码实现 熵、交叉熵、KL 散度的概念 熵(Entropy) 假设 p (x)是一个分布函数,满足在 x 上的积分为 1,那么 p(x)p(x)p(x)的熵定义为 H(p(x))H (p (x))H(p(x)),这里我们简写为 H(p)H(p)H(p) H(p)∫p(x)…

移动硬盘文件或目录损坏且无法读取,这样做就对了!

案例:移动硬盘文件或目录损坏且无法读取怎么办 【我的移动硬盘插入电脑后突然就显示文件损坏,遇到这种情况我应该怎么处理呀?感谢回答!】 移动硬盘是一种方便携带和存储数据的设备,然而,有时候可能会遇到…

UE中的channel

当我们需要处理碰撞矩阵,或者调用接口投射射线进行检测等,为了区分哪些对象可以被射线检测到,哪些对象忽略,就需要用到channel。 1.Channel 简介 在UE5中,一个对象的channel可以在Physics下查看: 设置成…

如何确保采购过程中的产品质量

在企业采购过程中,确保采购的产品质量是至关重要的。采购的质量直接关系到企业的生产和销售质量,影响企业的形象和利润。为了确保采购过程中的质量,企业需要采取一些措施来保证采购物料和商品的质量,以下是一些有效的方法&#xf…

Linux学习-----Chapter nine

使用 ssh 服务管理远程主机9.1 配置网络服务9.1.1 配置网卡参数9.1.2 创建网络会话9.1.3 绑定两块网卡1、创建一个bond网卡2、向bond0设备添加从属网卡3、配置bond0设备的网络信息4、启动它9.2 远程控制服务9.2.1 配置sshd服务9.2.2 安全密钥验证9.2.3 远程传输命令9.3 不间断会…

日撸 Java 三百行day25-26

文章目录说明day25 二叉树深度遍历的栈实现 (中序)1.具有通用性的对象栈2.栈实现中序遍历2.1 思路2.2 代码day26 二叉树深度遍历的栈实现 (前序和后序)1.前序遍历2.后序遍历说明 闵老师的文章链接: 日撸 Java 三百行(总述)_minfanphd的博客-…

Redis第二十八讲 Redis集群脑裂数据丢失问题与集群是否完整才能对外提供服务

集群脑裂数据丢失问题 所谓的脑裂,就是指在主从集群中,同时有两个主节点,它们都能接收写请求。而脑裂最直接的影响,就是客户端不知道应该往哪个主节点写入数据,结果就是不同的客户端会往不同的主节点上写入数据。而且,严重的话,脑裂会进一步导致数据丢失。 redis的集群…

银行数字化转型导师坚鹏:银行业同业竞争策略分析

《银行业同业竞争策略分析》 —数字化背景下银行转型发展创新思维 课程背景: 数字化背景下,很多银行存在以下问题: 不清楚国内领先银行的业务发展现状? 不清楚如何制定竞争策略? 不知道其他银行转型的成功做法&…

Matplotlib学习挑战第六关--散点图、柱形图、饼图

1、Matplotlib 散点图 我们可以使用 pyplot 中的 scatter() 方法来绘制散点图。 scatter() 方法语法格式如下: matplotlib.pyplot.scatter(x, y, sNone, cNone, markerNone, cmapNone,normNone, vminNone, vmaxNone, alphaNone, linewidthsNone, *, edgecolorsNo…

【RabbitMQ】RabbbitMQ的六种工作模式以及代码实现

目录 一、交换机类型 二、简单模式 1、介绍 2、代码实现 三、Work Queues工作队列模式 1、介绍 2、代码实现 四、Pub/Sub订阅模式 1、介绍 2、代码实现 五、Routing路由模式 1、介绍 2、代码实现 六、Topics通配符模式 1、介绍 2、代码实现 一、交换机类型 在…

uniapp开发,打包成H5部署到服务器

前端使用uniapp开发项目完成后,需要将页面打包,生成H5的静态文件,部署在服务器上。 这样通过服务器链接地址,直接可以在手机上点开来访问。 打包全步骤如下: 1、修改config.js内的请求地址 需要后台部署到测试服务器上…

项目进度管理软件的应用可以解决哪些问题

项目管理工具够满足了项目经理对项目资源:时间、人员和文档的管理,同时也提高了项目的可视化和促进了团队的协作。 项目进度管理要求在规定的时间内,通过合理的进度计划,在计划执行过程中,要检查实际进度是否按计划要…

PasteSpider之项目环境-同步过滤-键值配置介绍

项目环境 在菜单项目信息项目环境 中,在PasteSpider中项目->服务->环境,也就是服务是不能运行的,得绑定环境,比如开发环境,测试环境。通过这个概念你可以实现不同得人部署不同的环境,他们之间公用同版…