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

目录

一、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青软实训编 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AP有信号,但没有注册到AC上的排查

1、有wifi信号收到,并且可以连接,但A P没有获取到地址。 1.AP没有获取到地址,那么就一定没办法找到AC到地址进行注册。 2、交换侧现象: dis poe power 查看端口供电情况。 3、有供电,但没有UP。 4、判断为配…

如何使用Jellyfin结合内网穿透搭建私人影音平台远程可访问

作者简介: 懒大王敲代码,计算机专业应届生 今天给大家如何使用Jellyfin结合内网穿透搭建私人影音平台远程可访问,希望大家能觉得实用! 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 前言…

设计模式--桥接模式

实验9:桥接模式 本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解桥接模式的动机,掌握该模式的结构; 2、能够利用桥接模式解决实际问题。 [实验任务]:两个维度的桥接模式 用桥接模式…

JuiceSSH结合内网穿透实现公网远程访问本地Linux虚拟机

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

Ubuntu系统如何安装SVN服务端并通过客户端无公网ip实现远程访问?

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

Houdini 20版本 功能概述

SideFX 发布了 Houdini 20 预览版,这是其用于视觉特效、游戏开发和动态图形的程序 3D 软件的下一个主要版本,Houdini 20.0 对软件的主要工具集进行了更新,特别是角色装备和动画、模拟工具以及 Karma 渲染器。 Houdini 20新功能亮点 渲染 视频…

玩转大数据22:常见的关联规则挖掘算法

引言 关联规则挖掘是数据挖掘中的一种重要技术,主要用于发现数据集中项之间的有趣关系。关联规则挖掘在许多领域都有广泛的应用,如市场篮子分析、推荐系统等。常见的关联规则挖掘算法包括Apriori算法和FP-Growth算法。 一、Apriori算法 关联规则挖掘是…

制作一个可以离线安装的Visual Studio安装包

须知 前提条件,需要电脑可以正常上网且网速还行,硬盘可以空间容量足够大,怎么判断容量够用?由组件数量的多少来决定。Visual Studio 频道和发布节奏 https://learn.microsoft.com/zh-cn/visualstudio/productinfo/release-rhythm…

Linux上iPortal 配置80端口的http

作者:yx 文章目录 前言方法一、配置使用外置ES1、关闭启用 iPortal 内置的 ES2、修改80端口3、启动外置ES4、启动iPortal5、结果验证 方法二、更改 Linux 系统配置1. 安装 Authbind2. 启用端口的读取和执行权限3. 在 Apache Tomcat 上启用 Authbind4. 重启iPortal5.…

Mysql高级函数——GROUP_CONCAT

Mysql高级函数——GROUP_CONCAT 前言仰天大笑出门去,我辈岂是蓬蒿人 前言 大概内容: 在MySQL中,可以使用GROUP_CONCAT函数来实现将多个数据拼接为一个字符串的功能。GROUP_CONCAT函数接受一个参数,用于指定要拼接的数据列&#x…

【Unity3D日常BUG】Unity3D中编辑完代码后卡在Reload Scripts Assemblies界面的解决方案

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 首先,说明一下,每个人对于BUG的定义不一…

【多线程及高并发 二】线程基础及线程中断同步

👏作者简介:大家好,我是若明天不见,BAT的Java高级开发工程师,CSDN博客专家,后端领域优质创作者 📕系列专栏:多线程及高并发系列 📕其他专栏:微服务框架系列、…

SpringCloud和Dubbo有哪些区别

🍎个人博客:个人主页 🏆个人专栏: Spring ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 介绍 Spring Cloud: Dubbo: 选择: 区别 结语 我的其他博客 前言 构建分布式系统是…

Netty组件基础

Netty入门简介 netty是一个异步、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。 Netty优势 Netty解决了TCP传输问题,如黏包、半包问题,解决了epoll空轮询导致CPU100%的问题。并且Netty对API进行增强&#xf…

Playbook中jinja2模板的使用

本章主要介绍playbook中如何使用jinja2模板 什么是jinja2模板在jinja2模板文件中写if判断语句在jinja2模板文件在写for循环语句handlers的使用 可以使用copy模块把本地的一个文件拷贝到远端机器,下面再次复习一下 本章实验都在demo4文件夹下操作,跟之…

【RocketMQ】Console页面报错:rocketmq remote exception,connect to xxx failed.

现象 console报错,无法连接该节点,把该节点杀掉,还是继续报错,重启之后,报错的端口变成11911。 分析 正常一个broker会启动三个端口,不同版本的规律不太一样,4.X版本是: 配置文件…

软件工程经济学习题 答案(不保证对错,找不到答案)

一、资金等值计算 1.某IT企业今年向银行贷款20万元以购置一台设备。若银行贷款利率为10%,规定10年内等额偿还,试求每年的偿还金额。 2.某软件企业向银行贷款200万元,按年利率为8%进行复利计息,试求该企业第5年末连本带利一次偿还银…

计算机视觉技术-使用图像增广进行训练

让我们使用图像增广来训练模型。 这里,我们使用CIFAR-10数据集,而不是我们之前使用的Fashion-MNIST数据集。 这是因为Fashion-MNIST数据集中对象的位置和大小已被规范化,而CIFAR-10数据集中对象的颜色和大小差异更明显。 CIFAR-10数据集中的前…

Cost Calculator Builder PRO v3.1.46 已注册 – WordPress 插件

成本计算器生成器 PRO v3.1.46:WordPress 插件全解析 一、插件概述 "成本计算器生成器 PRO v3.1.46"是一款强大的WordPress插件,专为需要创建报价、价格和项目估算表的用户设计。这款插件集成了众多高级功能,可帮助用户高效地管理…

LVM逻辑卷管理

传统磁盘存在的问题: 1.当分区不够用时,无法扩展大小。 2.当磁盘分区不够用时,只能通过添加硬盘的方式,但是新添加的硬盘只能当作独立的系统文件存在。 所以如果生产环境的数据库的数据目录满了,只能通过添加新的硬…