返回顶部
首页 > 资讯 > 后端开发 > Python >Java之网络编程案例讲解
  • 467
分享到

Java之网络编程案例讲解

2024-04-02 19:04:59 467人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

Java基础之网络编程 基本概念 IP:每个电脑都有一个IP地址,在局域网内IP地址是可变的。 网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通

Java基础网络编程

基本概念

IP:每个电脑都有一个IP地址,在局域网内IP地址是可变的。

网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信。这就好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对数据的传输格

式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守,最终完成数据交换。

TCP协议(传输控制协议):是面向连接的传输层协议,应用程序在使用tcp之前,必须先建立TCP连接,在传输数据完毕后,必须释放已经建立的连接(跟打电话是否类似)。TCP可以保证从一端将数据传送至连接的另一端时,数据能够准确送达,而且送到的数据的排列顺序和送出时的顺序相同。

UDP协议(用户数据报协议):是无连接的通信协议,不保证可靠的数据传输,但能够向若干个目标发送数据,接收发自若干个源的数据。(在线影片,下载文件)。

端口(Port):如果把IP地址比作一间房子 ,端口就是出入这间房子的门。

套接字Socket)用于将应用程序与端口连接起来,类似于连接电器与电线的插座。

在Java中,提供了两个类用于实现TCP通信程序:

1.客户端:java.net.Socket类表示。创建Socket对象,向服务端发送连接请求,服务端相应请求,两者建立连接开始通信。

2.服务端:java.net.ServerSocket 类表示创建 ServerSocket 对象,相当于开启一个服务,并等待客户端的连接。

Socket 类:该类实现客户端套接字,套接字指的是两台设备之间通讯的端点。

构造函数与常用方法

public Socket(String host, int port) :创建套接字对象并将其连接到指定主机上的指定端口号。如果指定的host是null ,则相当于指定地址为回送地址。

public InputStream getInputStream() : 返回此套接字的输入流。

        如果此Scoket具有相关联的通道,则生成的InputStream 的所有操作也关联该通道。 关闭生成的InputStream也将关闭相关的Socket。

public OutputStream getOutputStream() : 返回此套接字的输出流。

        如果此Scoket具有相关联的通道,则生成的OutputStream 的所有操作也关联该通道。 关闭生成的OutputStream也将关闭相关的Socket。

public void close() :关闭此套接字。 一旦一个socket被关闭,它不可再使用。 关闭此socket也将关闭相关的InputStream和OutputStream 。

public void shutdownOutput() : 禁用此套接字的输出流。 任何先前写出的数据将被发送,随后终止输出流

客户端实现步骤--使用Socket

1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号

2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象

3.使用网络字节输出流OutputStream对象中的方法write,给服务器发送数据

4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象

5.使用网络字节输入流InputStream对象中方法read,读取服务器回写的数据

6.使用资源(Socket.Close)


  public static void main(String[] args) throws ioException {
        //1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号
        Socket socket = new Socket("127.0.0.1",8888);
        //2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
        OutputStream os = socket.getOutputStream();
        //3.使用网络字节输出流OutputStream对象中的方法write,给服务器发送数据
        os.write("你好服务器".getBytes());
        //4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
        InputStream is = socket.getInputStream();
        //5.使用网络字节输入流InputStream对象中方法read,读取服务器回写的数据
        byte[] bytes = new byte[1024];
        int len = is.read(bytes);
        System.out.println(new String(bytes,0,len));
        //6.使用资源(Socket.Close)
        socket.close();
    }

ServerSocket 类:这个类实现了服务器套接字,该对象等待通过网络的请求。 构造函数与常用方法

public ServerSocket(int port) :使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指定的端口号上,参数port就是端口号。

public Socket accept() :侦听并接受连接,返回一个新的 Socket 对象,用于和客户端实现通信。该方法会一直阻塞直到建立连接。

服务器端实现步骤--使用ServerSocket

1.使用服务器ServerSocket对象和系统要指定的端口号

2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象socket

3.使用Socket对象中的getInputStream()获取网络字节输入流Inputstream对象

4.使用网络字节输入流InputStream对象中方法read,读取客户端发送的数据

5.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象

6.使用网络字节输出流Outputstream对象中的方法Write,给客户端回写数据

7.释放资源(Socket,ServerSocket)


 public static void main(String[]args)throws IOException{
        //1.使用服务器ServerSocket对象和系统要指定的端口号
        ServerSocket server=new ServerSocket(8888);
        //2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象socket
        Socket socket=server.accept();
        //3.使用Socket对象中的getInputStream()获取网络字节输入流Inputstream对象
        InputStream is=socket.getInputStream();
        //4..使用网络字节输入流InputStream对象中方法read,读取客户端发送的数据
        byte[]bytes=new byte[1024];
        int len=is.read(bytes);
        System.out.println(new String(bytes,0,len));
        //5.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
        OutputStream os=socket.getOutputStream();
        //6.使用网络字节输出流Outputstream对象中的方法Write,给客户端回写数据
        os.write("收到谢谢".getBytes());
        //7.释放资源(Socket,ServerSocket)
        server.close();
        socket.close();
    }

文件上传练习

客户端


 public static void main(String[]args)throws IOException{
        //1.创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源
        FileInputStream fis=new FileInputStream("c:\\1.jpg");
        //2.创建一个客户端Socket对象,构造方法中绑定服务器的IP地址和端口号
        Socket socket=new Socket("127.0.0.1",8888);
        //3.使用Socket中的方法getOutputStream,获取网络字节输出流OutputStream对象
        OutputStream os=socket.getOutputStream();
        //4.使用本地字节输入流FileInputStream对象中的方法read,读取本地文件
        int len=0;
        byte[]bytes=new byte[1024];
        while((len=fis.read(bytes))!=-1){
            //5.使用网络字节输出流OutputStream对象中的方法write,把读取到的文件上传到服务器
            os.write(bytes,0,len);
        }
 
        
        socket.shutdownOutput();
 
        //6.使用Socket中的方法getInputStream,获取网络字节输入流InputStream对象
        InputStream is=socket.getInputStream();
 
        System.out.println("333333333333333333333");
 
        //7.使用网络字节输入流InputStream对象中的方法read读取服务回写的数据
        while((len=is.read(bytes))!=-1){
            System.out.println(new String(bytes,0,len));
        }
 
        System.out.println("444444444444444444while死循环打印不到");
 
        //8.释放资源(FileInputStream,Socket)
        fis.close();
        socket.close();
    }

 服务端


 public static void main(String[]args)throws IOException{
        //1.创建一个服务器ServerSocket对象,和系统要指定的端口号
        ServerSocket server=new ServerSocket(8888);
        //2.使用ServerSocket对象中的方法accept,获取到请求的客户端Socket对象
        Socket socket=server.accept();
        //3.使用Socket对象中的方法getInputStream,获取到网络字节输入流InputStream对象
        InputStream is=socket.getInputStream();
        //4.判断d:\\upload文件夹是否存在,不存在则创建
        File file=new File("d:\\upload");
        if(!file.exists()){
            file.mkdirs();
        }
 
 
        //5.创建一个本地字节输出流FileOutputStream对象,构造方法中绑定要输出的目的地
        FileOutputStream fos=new FileOutputStream(file+"\\1.jpg");
        //6.使用网络字节输入流InputStream对象中的方法read,读取客户端上传的文件
 
        System.out.println("11111111111111111111");
 
        int len=0;
        byte[]bytes=new byte[1024];
        while((len=is.read(bytes))!=-1){
            //7.使用本地字节输出流FileOutputStream对象中的方法write,把读取到的文件保存到服务器的硬盘上
            fos.write(bytes,0,len);
        }
 
        System.out.println("22222222222222222222222while死循环打印不到");
 
        //8.使用Socket对象中的方法getOutputStream,获取到网络字节输出流OutputStream对象
        //9.使用网络字节输出流OutputStream对象中的方法write,给客户端回写"上传成功"
        socket.getOutputStream().write("上传成功".getBytes());
        //10.释放资源(FileOutputStream,Socket,ServerSocket)
        fos.close();
        socket.close();
        server.close();
    }

到此这篇关于Java之网络编程案例讲解的文章就介绍到这了,更多相关Java之网络编程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java之网络编程案例讲解

本文链接: https://lsjlt.com/news/131321.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java之网络编程案例讲解
    Java基础之网络编程 基本概念 IP:每个电脑都有一个IP地址,在局域网内IP地址是可变的。 网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通...
    99+
    2024-04-02
  • Java之springcloud Sentinel案例讲解
    一、Sentinel是什么? Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。 它以流量为切入点,从流量控制、熔断降级、系统负载保护等多...
    99+
    2024-04-02
  • Java之线程编程的4种方法实现案例讲解
    1、继承Thread public class T4 { public static void main(String[] args) { System.out.print...
    99+
    2024-04-02
  • Java网络编程之UDP网络通信详解
    目录1.UDP网络通信编程原理1.1 UDP网络通信编程介绍1.2 UDP网络通信编程的基本流程2.UDP网络通信编程案例1.UDP网络通信编程原理 1.1 UDP网络通信编程介绍 ...
    99+
    2024-04-02
  • Java之网络编程的示例分析
    小编给大家分享一下Java之网络编程的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java基础之网络编程基本概念IP:每个电脑都有一个IP地址,在局域网...
    99+
    2023-06-20
  • Java之操作Redis案例讲解
    首先 下载 jedis.jar包 然后再 工程设置里面找到Libraries,点击+。添加下载好的jedis.jar包。点击OK退出即可 创建Java_Control_Redis类...
    99+
    2024-04-02
  • Java之String.format()方法案例讲解
    前言:  String.format()作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,这里根据查阅的资料做个学习笔记,整理成如下文章,供后续复习查阅。 一. f...
    99+
    2024-04-02
  • C++网络编程详细讲解
    目录一、网络编程二、库示例练习一、网络编程 尽管 Boost.Asio 可以异步处理任何类型的数据,但它主要用于网络编程。这是因为 Boost.Asio 早在添加额外的 I/O 对象...
    99+
    2022-11-13
    C++网络编程 C++网络通信编程
  • Java之SpringCloudAlibaba Sentinel组件案例讲解
    Sentinel 是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 官...
    99+
    2024-04-02
  • Python之进行URL编码案例讲解
    为什么要对URL进行encode 在写网络爬虫时,发现提交表单中的中文字符都变成了TextBox1=%B8%C5%C2%CA%C2%DB这种样子,观察这是中文对应的GB2312编码,...
    99+
    2024-04-02
  • C++ TCP网络编程详细讲解
    目录TCP介绍与编程流程TCP C/S架构TCP客户端编程流程1. 创建TCP套接字2. connect连接服务器3. send发送请求4. recv接收应答(默认带阻塞)5. cl...
    99+
    2024-04-02
  • Java之api网关断言及过滤器案例讲解
    目录一、什么是api网关?二、常见的api网关三、使用步骤1.Spring Cloud Gateway2.优缺点3.传统的过滤器4.使用gateway4.1module4.2添加po...
    99+
    2024-04-02
  • Java网络编程之入门篇
    目录一、网络基础二、网络协议URL类一、网络基础   二、网络协议 实现TCP的网络编程 例子1:客户端发送信息给服务端,服务端将数据显示在控制台上 p...
    99+
    2024-04-02
  • 详解Java网络编程
    目录一、网络编程1.1、概述1.2、计算机网络基础1.3、网络通信要素概述1.4、IP地址和端口号(组合就是网络套接字)1.5、网络协议1.6、三次握手与四次挥手二、TCP网络编程2...
    99+
    2024-04-02
  • Java之常用类小结案例讲解
    Java常用类 包装类 由于Java语言中的基本类型不是面向对象,并不具备对象的性质,实际使用存在很多不便。Java在java.lang包中提供了八种基本类型对应的包装类,可以方便地...
    99+
    2024-04-02
  • Java之IO流面试题案例讲解
    一、Java中IO流分为几种? 按照流的流向分,可以分为输入流和输出流; 按照操作单元分,可以分为字节流和字符流(字节流可以读写任何单位的数据,字符流只可以读写tx...
    99+
    2024-04-02
  • Java之类加载机制案例讲解
    1.类加载 <1>.父子类执行的顺序 1.父类的静态变量和静态代码块(书写顺序) 2.子类的静态变量和静态代码块(书写顺序) 3.父类的实例代码块(书写顺序) 4.父类...
    99+
    2024-04-02
  • Java之SpringBoot定时任务案例讲解
    1. SpringBoot--任务:定时任务 项目开发中经常需要执行一些定时任务,比如需要在每天凌晨的时候, 分析一次前一天的日志信息,Spring为我们提供了异步执行任务调度的...
    99+
    2024-04-02
  • java volatile案例讲解
    本篇来自java并发编程实战关于volatile的总结。 要说volatile,先得明白内存可见性。那我们就从内存可见性说起。 一、内存可见性 可见性是一种复杂的属性,因为可见性中的...
    99+
    2024-04-02
  • Java e.printStackTrace()案例讲解
    一、含义 catch(Exception e) { e.printStackTrace(); } 当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将ca...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作