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());           //主机对应ipSystem.out.println(localip.toString());                 //将ip和名字结合的show方法System.out.println(localip.isReachable(5000));  //ping一下ipSystem.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.mzph.cn/news/573560.shtml

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

相关文章

iOS懒加载

1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,写的是其getter方法。说的通俗一点,就是在开发中,当程序中需要利用的资源时。在程序启动的时候不…

【Django】Django Debug Toolbar调试工具配置

正在发愁怎么调试Django,就遇到了Django Debug Toolbar这个利器。 先说遇到的问题: 网上也有教程,不过五花八门的,挨个尝试了一遍,也没有成功运行。最后终于找到问题所在: 从开发服务器日志可知&#xff1a…

python中提取pdf文件某些页_人工智能|Python提取PDF中的文本并朗读

题前的话之前有老师在群里推荐这个,我看了一眼觉得还是蛮有趣的,然后就忘了……昨天又看到这个《宅男福利!我50行Python代码让小姐姐给你读Pdf》,今天于是开始自己尝试,谁知道pdfplumber库怎么也安装不了,最…

[UVA315]Network(tarjan, 求割点)

题目链接:https://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem251 求割点,除了输入用strtok和sscanf处理输入以外,对于求割点的tarjan算法有了进一步理解。 特别注意88行&#xff0…

prim求最短路径C语言,[图论]Prim算法求最小支撑树和最短路径

这个是以前所学,现在总结成博文一篇。对于图论中的求解最小支撑树问题和最短路径问题都有比较经典的算法,比如最小支撑树可以采用“破圈法”,求解最短路径可以用“Dijkstra算法”。这里笔者将回顾下求解最小支撑树的Prim算法和最短路径算法。…

pycharm镜像源_pycharm安装第三方库

点击蓝字关注我们hello,大家好,我是你们的小编大飞。小编一直在学习编程语言,挑选了很久之后决定入了python的坑(bushi)。而python之所以火,是因为它专注于如何解决问题、自由开放的社区环境以及丰富的第三方库。几乎可以这么说&a…

android系统源码的环境下用make来编译,Android源码编译系统入门

做过 Android 平台开发的朋友对make,mm或make clean命令应该很熟悉,但也许大家只是熟知这些命令的作用却不知道这些命令底下有些什么原理?那么今天我就带着大家推开Android编译系统的大门,探索一下这片未知的恐怖之森(问啥要用恐怖…

(mac)阿里云ECS服务器配置过程

-----首先本人是半只脚入门的iOS开发者,弄这个只是单纯想多学点东西。 -----阿里云服务器的配置选择:既然是学习用的,最最基础的配置就行了。1M带宽,1核1G...这就不详述了。没啥可选的,(其中有个创建实例&a…

android 换到iphone,从安卓换到苹果到底是什么感受?最后一个让我彻底放弃了iPhone!...

原标题:从安卓换到苹果到底是什么感受?最后一个让我彻底放弃了iPhone!iPhone X是近几年来苹果最具创新力的iPhone,然而高昂的售价让很多消费者望而却步。随着今年苹果秋季新品发布会的临近,苹果即将发布价格更低廉&…

php 5.5 xhprof for windows

今天看到一个好的性能优软件xhprof(有facebook开发的类库)在国内找了很多网站都没有找到相关php5.5的扩展,只好FQ还是外面的世界精彩一下就找到了link (http://windows.php.net/downloads/pecl/releases/xhprof/0.10.6/)如果不能FQ的小伙伴可以到我的百度…

鸿蒙分布式体验,一张图看懂鸿蒙OS 2.0 分布式能力升级构筑全场景体验

原标题:一张图看懂鸿蒙OS 2.0 分布式能力升级构筑全场景体验【手机中国新闻】9月10日下午,华为召开HDC2020大会,全新的HarmonyOS 2.0正式发布。新系统的分布式能力全面升级,同时还为开发者提供了完整分布式设备与应用开发生态&…

如何在android模拟器中安装apk

1. 启动android模拟器 2. 将要安装的apk,拷贝在与adb.exe同文件夹中。我的路径:D:\android\android-sdk-windows\platform-tools 3. 在cmd中,进入上目录,输入adb install xxx.apk,最后可看见success 4. 回到android模拟…

传感器系列之4.3流量传感器

4.3 流量数据采集实验 一、实验目的掌握水流量计的结构与工作原理掌握霍尔传感器的使用二、实验材料具有USB 串口通讯的PC 机1 台ADS1.2 集成开发软件1 套J-Link-ARM 仿真器及软件1 套NXP LPC2378 实验节点板1 个LCD 显示实验板1 个BMP085数字气压传感器模块1个三、实验原理流量…

鸿蒙日程管理若离,2020华为HDC日程确定,鸿蒙、HMS以及EMUI 11成最关注点

HDC:华为开发者大会,目前已经确定将在9月10日正式开幕。日前华为已经在其官网公布了HDC的日程,从现在的消息看华为开发者大会有三大点最受业内关注。鸿蒙操作系统鸿蒙操作系统应该是大家关注最大的话题,不过此前余承东已经正式表示…

语言课设医院诊疗系统_江苏孤独症孩子有哪些典型特征?上海六一儿童医院

孤独症孩子有哪些典型特征当家长发现孩子不爱说话,不理人的时候,有时怀疑孩子是不是患了孤独症。对于孤独症的孩子和正常的孩子还是不一样的。那么,孤独症孩子有哪些典型的特征呢?孤独症孩子的典型特征主要有以下几点:特征一&…

android 6.0适应的机型,提升用户体验 可升Android 6.0机型盘点

原标题:提升用户体验 可升Android 6.0机型盘点【手机中国 导购】2009年Android系统正式发布,由此加速手机走向智能化进度。如今,随着Android系统日渐成熟,众多手机厂商都在此基础上研发出符合自家特色的系统版本,并且流…

antd 能自适应吗_一种能自适应识别母线运行方式的备自投装置应用探讨

中山供电局的研究人员江清楷,在2019年第8期《电气技术》杂志上撰文,介绍了一种220kV备自投装置,列出了母联备自投和线路备自投的充电条件及起动条件。以220kV逸仙变电站为例,指出该备自投装置在双母线单分段接线的变电站应用中存在…

html页面tableview,用JS写的一个TableView控件代码

请看看编码是否规范,使用是否方便HTML:代码编号姓名{value}{value}编号名称{value}{value}Javascript:代码//class TableView {//构造函数function TableView(ID){var htmlTable document.getElementById(ID);this.container htmlTable.getElementsByTagName(&quo…

HTML中空格代码为,html空格 html 空格代码

html 空格和html空格代码篇在HTML网页排版机关时,一个翰墨与翰墨间空格可使用一个使用空格键直接空一格便可。然则要实现多个空格间隔,打再多空格键空格,始终至多展现一个空格地位。那末如何才智html构造中笔墨间完成多个空格成果&#xff1f…

centos 下载文件很慢_CentOS镜像下载

官网下载链接:http://isoredirect.centos.org/centos/7/isos/x86_64/step1: 进入下载页,选择阿里云站点进行下载Actual Country 国内资源 Nearby Countries 周边国家资源阿里云站点:http://mirrors.aliyun.com/centos/7/isos/x86_64/每个链接…