CUMT--Java复习--网络编程

news2024/9/29 9:35:25

目录

一、Java网络API

1、InetAddress类

2、URL类

3、URLConnection类

4、URLDecoder类和URLEncoder类

二、基于TCP的网络编程

1、Socket类

2、ServerSocket类

三、网络通信过程


一、Java网络API

        Java中有关网络方面的功能都定义在java.net中。

1、InetAddress类

        Java中使用InetAddress类封装IP地址或域名,InetAddress类没有构造方法,因此不能创建对象,一般采用下面的定义方法:

InetAddress localip=InetAddress.getLocalHost();        利用类内方法

        在使用调用网络api时,注意要添加异常机制,异常对象使用IOException,大多数异常都继承于输入输出流异常。

        InetAddress常用方法:

        调用上述方法的实例:

        注意,对于特定域名,以及特定ip的不同初始化的方法,byte要小写。

import java.io.IOException;
import java.net.*;
public class api {
    public static void main(String[] args)
    {
        try{
            InetAddress localip=InetAddress.getLocalHost();
            System.out.println(localip.getHostName());              //主机名字
            System.out.println(localip.getCanonicalHostName());     //全限定域名
            System.out.println(localip.getHostAddress());           //主机对应ip
            System.out.println(localip.toString());                 //将ip和名字结合的show方法
            System.out.println(localip.isReachable(5000));  //ping一下ip
            System.out.println("-----------------------");
            InetAddress baidu=InetAddress.getByName("www.baidu.com");
            System.out.println(baidu.toString());
            System.out.println(baidu.isReachable(5000));
            System.out.println("-----------------------");
            InetAddress orient=InetAddress.getByAddress(new byte[]{127,0,0,1}); //注意这种写法
            System.out.println(orient.toString());
            System.out.println(orient.isReachable(5000));
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
}

2、URL类

         URL表示互联网某一资源的地址,由协议名、主机、端口和资源四个部分组成,语法如下:

protocol://host:port/resourceName

        Java将URL封装成URL类,通过URL对象调用方法,可以获取URL的内部信息,就是拆解URL,而不是去访问URL。(URL在jdk 20版本已经被删掉了)

3、URLConnection类

         URLConnection代表与URL指定的数据源的动态连接,允许使用POST或PUT和其他HTTP请求方法将数据送回服务器。

        URLConnection常用方法:

        下面代码实例为访问网站,并将网站信息写在txt文件:

         其中,先运用IO的知识,通过File类确定是否存在保存文件1.txt若没有则生成该文件。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

public class url {
   public static void main(String[] args)
   {
        //不存在文件则创建一个文件
        File file=new File("src/net/1.txt");
        try{
            file.createNewFile();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        //访问网址,并写入文件
        FileWriter fw=null;
        try{
            URL url=new URL("https://blog.csdn.net/m0_60177079/article/details/135175601?spm=1001.2014.3001.5501");
            URLConnection urlc=url.openConnection();
            urlc.setRequestProperty("Char", "UTF-8");
            BufferedReader br=new BufferedReader(new InputStreamReader(urlc.getInputStream()));
            String input;

            fw=new FileWriter("src/net/1.txt");
            while((input=br.readLine())!=null)
            {
                fw.write(input);
            }
        }
        catch(IOException E)
        {
            E.printStackTrace();
        }
        finally
        {
            try{
                fw.close();
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
        }
   }
}

4、URLDecoder类和URLEncoder类

        存在非西欧字符串时系统会将字符串转换成application/x-www-form-urlencoded MIME字符串,相对比的为普通字符串,那么在这两者之间转换的方法就是URLDecoder类中的decode方法和URLEncoder类中的encode方法。

二、基于TCP的网络编程

        Java对于TCP网络通信提供了封装,使用Socket对象封装了通信两端的通信端口,Socket允许应用程序将网络连接当成一个IO流。

        Java.net中包含使用的两种Socket,ServerSocket(服务器套接字)和Socket(客户端套接字)

1、Socket类

        通过Socket类来连接服务器(当前文件作为客户端),构造方法如下:

Socket socket=new Socket("127.0.0.1",28888);

        Socket常用方法: 

        客户端通信具体步骤:

(1)创建一个Socket对象

(2)调用getOutputStream()方法,往Socket中写数据,一般使用new PrintStream(socket.getOutputStream()),并调用PrintStream的println方法输出到服务器端。

(3)调用getInputStream()方法,从Socket中读数据,一般用new BufferedReader(new InputStreamReader(socket.getInputStream())),通过调用BufferedReader的readline方法,返回服务器的信息,输出到客户端。

(4)客户端与服务器根据协议进行交互,直到关闭连接,期间可以对于PrintStream和BufferedReader所创建的ps和br对象进行flush操作,清除缓冲区。

(5)关闭客户端的Socket

2、ServerSocket类

        ServerSocket是服务器套接字,运行在服务器端,通过指定端口主动监听来自客户端的Socket连接。

        创建ServerSocket对象:

try{
     server=new ServerSocket(28888);
}
catch(IOException e)
{
     e.printStackTrace();
}

        服务器端需要继承于线程类,并在构造方法中,通过start方法,运行线程,并重新run方法。

        ServerSocket常用方法:

       根据ServerSocket进行网络通信的具体步骤:

(1)建立ServerSocket对象

(2)调用ServerSocket对象的accept()方法接收客户端发送的Socket对象

(3)调用getInputStream()方法,从Socket中读数据,一般用new BufferedReader(new InputStreamReader(socket.getInputStream())),通过调用BufferedReader的readline方法,返回服务器的信息,输出到服务器端。

(4)调用getOutputStream()方法,往Socket中写数据,一般使用new PrintStream(socket.getOutputStream()),并调用PrintStream的println方法输出到客户端。

(5)服务器与客户端根据一定的协议交互,知道关闭连接

(6)关闭服务器端的Socket

(7)回到第二步,重新监听下一次客户端发送的Socket请求连接。

三、网络通信过程

        使用Socket进行基于C/S架构的网络通信程序设计过程:

(1)服务器端通过某个端口监听是否有客户端发送Socket连接请求

(2)客户端向服务端发出一个Socket连接请求

(3)服务器端调用accept()接收客户端Socket并建立连接

(4)通过调用Socket对象的getInputStream()/getOutputStream()方法进行IO流操作,服务器与客户端进行信息交互

(5)关闭服务器端和客户端的Sokcet

        C/S过程代码:

        服务器端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server extends Thread{
    ServerSocket server;
    int num=0;
    public Server(){                               //构造ServerSocket服务器端套接字类
        try{
            server=new ServerSocket(28888);
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        this.start();                              //线程启动
        System.out.println("Server start!");
    }
    public void run()
    {
        while(this.isAlive())                      //是否存在线程
        {
            BufferedReader br=null;
            PrintStream ps=null;
            try{
                Socket socket=server.accept();     //监听
                br=new BufferedReader(new InputStreamReader(socket.getInputStream()));    //向客户端输入
                String line=br.readLine();
                System.out.println(line);
                ps=new PrintStream(socket.getOutputStream());    //输出到服务器端
                ps.println("你是第"+(num++)+"个用户");
                ps.flush();
                br.close();
                ps.close();
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }       
        }
    }
    public static void main(String[] args)
    {
        new Server();                                            //启动一个Server类
    }
}


        客户端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

public class Cilent {
   public static void main(String[] args)
   {
        BufferedReader br=null;
        PrintStream ps=null;
        try{
            Socket socket=new Socket("127.0.0.1",28888);    //本机28888端口构造Socket套接字类
            ps=new PrintStream(socket.getOutputStream());   //输出到客户端
            ps.println("hello world!");
            ps.flush();
            br=new BufferedReader(new InputStreamReader(socket.getInputStream()));    //输入到服务器端
            String line=br.readLine();
            System.out.println("From Server:");
            System.out.println(line);
            br.close();
            ps.close();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
   }

}

 

 参考书籍:《Java 8 基础应用与开发》QST青软实训编 

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

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

相关文章

MySQL undo日志精讲3-从回滚段中申请 Undo 页面链表

回滚段-Rollback Segment Header 页面 回滚段的概念 我们现在知道一个事务在执行过程中最多可以分配4个 Undo 页面链表,在同一时刻不同事务拥有的 Undo 页面链表是不一样的,所以在同一时刻系统里其实可以有许许多多个 Undo 页面链表存在。为了更好的管…

工业互联网:数字化制造的未来

引言 在当今的数字化时代,制造业正经历着革命性的变革。工业互联网(Industrial Internet of Things",简称 IIoT)作为这一变革的核心引擎,正在重新定义现代工业和制造。本文将探讨工业互联网的基础、关键技术、应…

论文润色的原理是什么 PaperBERT

大家好,今天来聊聊论文润色的原理是什么,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 标题:论文润色的原理――探究论文润色背后的科学依据 一、…

第十五节TypeScript 接口

1、简介 接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要有由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。 2、接口的定义 interface interface_…

利用STM32和可控硅控制220V加热电路

利用STM32和可控硅控制220V加热电路 Chapter1 利用STM32和可控硅控制220V加热电路一、错误原理图二、正确原理图 Chapter2 可控硅驱动芯片MOC3081/3061Chapter3 一个MOC3061的可控硅触发电路的分析Chapter4 可控硅的两种触发方式:移相触发和过零触发1、过零触发2、移…

C++面试宝典第9题:找出第K大元素

题目 给定一个整数数组a,同时给定它的大小N和要找的K(1 <= K <= N),请根据快速排序的思路,找出数组中第K大的数(保证答案存在)。比如:数组a为[50, 23, 66, 18, 72],数组大小N为5,K为3,则第K大的数为50。 解析 这道题主要考察应聘者对于快速排序的理解,以及实…

​【C语言】乘法表

题目要求&#xff1a; 实现一个函数&#xff0c;打印乘法口诀表&#xff0c;口诀表的行数和列数自己指定 如&#xff1a;输入9&#xff0c;输出9 * 9口诀表&#xff0c;输出12&#xff0c;输出12 * 12的乘法口诀表。 题目分析&#xff1a; 我们观察乘法口诀表可以发现&#x…

【重点!!!】【堆】215.数组中的第K个最大元素

题目 法1&#xff1a;小根堆 最大的K个元素 > 小根堆&#xff08;类似上窄下宽的梯形&#xff09; 最小的K个元素 > 大根堆&#xff08;类似倒三角形&#xff09; 必须掌握&#xff01;&#xff01;&#xff01; class Solution {public int findKthLargest(int[] nu…

4.3 媒资管理模块 - Minio系统上传图片与视频

文章目录 一、上传图片1.1 需求分析1.2 数据模型1.2.1 media_files 媒资信息表 1.3 准备Minio环境1.3.1 桶环境1.3.2 连接Minio参数1.3.3 Minio配置类 1.4 接口定义1.4.1 上传图片接口请求参数1.4.2 上传图片接口返回值1.4.3 接口代码 1.5 MediaFilesMapper1.6 MediaFileServic…

解决log4j多个日志都写到一个文件

之前客户端程序由于Websockt包依赖的log4j&#xff0c;就用log4j写日志了&#xff0c;Web用的log4j2没毛病。用log4j的多个logger的日志都写到一个文件里了&#xff0c;查了很多资料都没解决。今天闲了解决一下。 最后好使的配置 # 设置日志根 log4j.rootLogger INFO,Except…

uni-app之HelloWorld实现

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

选择排序(java)

选择排序 选择排序是默认前面都是已经排序好的&#xff0c;然后从后面 选择最小的放在前面排序好的的后面&#xff0c;首先第一轮循环的时候默认的排序好的为空&#xff0c;然后从后面选择最小的放到数组的第一个位置&#xff0c;第二轮循环的时候默认第个元素是已经 排序好的…

深度学习中的Dropout

1 Dropout概述 1.1 什么是Dropout 在2012年&#xff0c;Hinton在其论文《Improving neural networks by preventing co-adaptation of feature detectors》中提出Dropout。当一个复杂的前馈神经网络被训练在小的数据集时&#xff0c;容易造成过拟合。为了防止过拟合&#xff…

光耦继电器

光耦继电器(光电继电器) AQW282SX 282SZ 280SX 280SZ 284SX 284SZ 212S 212SX 21 2SZ 文章目录 光耦继电器(光电继电器)前言一、光耦继电器是什么二、光耦继电器的类型三、光电耦合器的应用总结前言 光耦继电器在工业控制、通讯、医疗设备、家电及汽车电子等领域得到广泛应…

基于鸢尾花数据集的逻辑回归分类实践

基于鸢尾花数据集的逻辑回归分类实践 重要知识点 逻辑回归 原理简介&#xff1a; Logistic回归虽然名字里带“回归”&#xff0c;但是它实际上是一种分类方法&#xff0c;主要用于两分类问题&#xff08;即输出只有两种&#xff0c;分别代表两个类别&#xff09;&#xff0c…

Flutter windows 环境配置

Flutter windows 环境配置 从零开始&#xff0c;演示flutter环境配置到启动项目&#xff0c;同时支持 vscode 和 android studio 目录 Flutter windows 环境配置一、环境配置1. Flutter SDK2. Android Studio3. JDK4. 拓展安装5. Visual Studio 2022二、项目创建和启动1. vsco…

Spark集群部署与架构

在大数据时代&#xff0c;处理海量数据需要分布式计算框架。Apache Spark作为一种强大的大数据处理工具&#xff0c;可以在集群中高效运行&#xff0c;处理数十TB甚至PB级别的数据。本文将介绍如何构建和管理Spark集群&#xff0c;以满足大规模数据处理的需求。 Spark集群架构…

小狐狸ChatGPT付费创作系统小程序端开发工具提示打开显示无法打开页面解决办法

最新版2.6.7版下载&#xff1a;https://download.csdn.net/download/mo3408/88656497 很多会员在上传小程序前端时经常出现首页无法打开的情况&#xff0c;错误提示无法打开该页面&#xff0c;不支持打开&#xff0c;这种问题其实就是权限问题&#xff0c;页面是通过调用web-v…

vue3(七)-基础入门之事件总线与动态组件

一、事件总线 事件总线使用场景&#xff1a; 两个兄弟组件之间的传参&#xff0c;或者两个没有关联的组件之间的传参 html &#xff1a;引入 publicmsg 与 acceptmsg 自定义组件 (自定义组件名称必须小写) <body><div id"app"><publicmsg></…

Linux---命令行参数+环境变量

一、命令行参数 int main(int argc,char*argv[]) {//...return 0; } 不知道有没有人见过这样的主函数&#xff0c;它带了两个参数&#xff0c;argv接收的参数就叫做命令行参数&#xff0c;因为它的参数是从命令行来的&#xff0c;给大家演示一下&#xff0c;大家就懂了 命令行…