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.hqwc.cn/news/299154.html

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

相关文章

【Python版】手把手带你如何进行Mock测试

什么是mock? mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为,很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为 为什么要使用Mock? 之所以使用mock测试,是因为真实…

Modbus 通信协议

Modbus 简介 Modbus 通信协议是一种主从式 串行 异步 半双工通信协议。 可以一个主站对多个从站进行双向通信。 主站可单独和从站通信,也可以广播式和所有从站通信。 Modbus 数据格式 c 功能码 常用功能码 H03 常用功能码 H06 常用功能码 H10 错误应答 1&#xff…

机器学习、人工智能、深度学习的关系

人工智能(Artificial Intelligence,AI) 人工智能范围很广,它是一门新的科学与工程,是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的技术科学,研究内容涵盖语音识别、图像识别、自然语言处理、智能搜索和…

第11章 GUI Page436 步骤十 使用缓冲DC, wxBufferedPaintDC

所谓“缓冲DC”,是指将所有图元都先划到一个人眼看不到的“设备上下文”之上,最后再一次性复制到真正的屏幕DC之上,这样我们就看不到中间画的过程了,也就不会感到闪烁了。 注意,这时不能解除ScrolledWindow1的背景擦除…

OAuth2.0 的四种授权方式

目录 前言 一、OAuth2.0 为何物 二、OAuth2.0 授权方式 1、授权码 2、隐藏式 3、密码式 4、凭证式 三、令牌的使用与更新 1、令牌怎么用? ​编辑2、令牌过期怎么办? 总结 前言 当今互联网应用程序中,保护用户数据的安全性是至关重要…

网红营销卧底式竞调!高效洞悉竞对网红营销增长逻辑!

知己知彼,百战不殆。 一次好的竞品调研不仅可以了解目标市场看清市场发展趋势、找准市场切入点,还可以有效帮助品牌做出正确的营销决策,少走许多弯路。 那么海外网红营销如何进行竞品调研呢?一次好的竞调又对网红营销有什么帮助…

智能优化算法应用:基于蜣螂算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于蜣螂算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于蜣螂算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蜣螂算法4.实验参数设定5.算法结果6.参考文献7.MA…

司铭宇老师:如何让企业销售培训效果落地

如何让企业销售培训效果落地 在企业销售培训中,我们经常听到一个词,那就是“落地”。所谓的“落地”,简单来说就是将培训中所学到的知识和技能转化为实际的工作行动,从而提高销售业绩。但是,如何才能让销售培训效果真…

YOLOv5 目标计数 | 图片上绘制计数结果

修改方法: 只需要改 detect.py for path, im, im0s, vid_cap, s in dataset: 下新增一行 class_counts = {} class_counts[int(c)] = class_counts.get(int(c

web前端游戏项目-辨色大比拼【附源码】

web前端游戏项目-辨色大比拼【附源码】 《辨色大比拼》是一个旨在测试和提升玩家颜色识别能力的在线游戏。在游戏中,玩家将通过辨识颜色来解谜并推进游戏进程。辨色大比拼也是一个寓教于乐的游戏,它不仅提供了一个有趣的辨色挑战,还能帮助玩…

C# 类型和成员

C# 教程 - 类型及其成员 - C# | Microsoft Learnhttps://learn.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/types 目录 类和对象 类型参数 基类 结构 接口 枚举 可为 null 的类型 元组 作为面向对象的语言,C# 支持封装、继承和多态性这些概念。 类可…

使用uniclould开发支付宝小程序提示:Uncaught URIError: URI malformed

一般这种情况是你云数据库里的内容出现了%号,像我这种格式,我之前在content内容里出现了百分号,在小程序端那里一直报错Uncaught URIError: URI malformed 。后来把content内容里的百分号全去掉就行了。跟空格之类的没关系