十四、网络编程

目录

  • 一、网络编程概述
  • 二、网络通讯要素
    • 1、IP和端口号
    • 2、网络通信协议
  • 三、IP和端口号
  • 四、网络协议
    • 1、网络通信协议
    • 2、TCP/IP协议簇
      • 1)TCP协议
      • 2)UDP
    • 3、Socket
  • 五、TCP网络编程
    • 1、基于Socket的TCP编程
      • 1)客户端创建socket对象
      • 2) 服务器端建立 ServerSocket对象
    • 2、UDP网络通信
  • 六、URL网络编程
    • 1、URL类
    • 2、URLConnection类
    • 3、URI、URL、URN的区别

一、网络编程概述

Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序

网络编程的目的:
直接或间接地通过网络协议与其它计算机实现数据交换,进行通讯。

网络编程中有两个主要的问题:
如何准确地定位网络上一台或多台主机;定位主机上的特定的应用
找到主机后如何可靠高效地进行数据传输

二、网络通讯要素

1、IP和端口号

2、网络通信协议

有两套参考模型:
OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广
TCP/IP参考模型(或TCP/IP协议):事实上的国际标准。
在这里插入图片描述

三、IP和端口号

IP:InetAddress(java中的一个类代表网络IP地址)

端口号:标识正在计算机上运行的进程(程序)

  • 不同的进程有不同的端口号
  • 被规定为一个 16 位的整数 0~65535。
  • 端口分类:
    - 0~1023。被预先定义的服务通信占用(如:HTTP占用端口80,FTP占用端口21,Telnet占用端口23)
    - 注册端口:1024~49151。分配给用户进程或应用程序。(如:Tomcat占用端口8080,MySQL占用端口3306,Oracle占用端口1521等)。
    - 动态/私有端口:49152~65535

网络套接字Socket:端口号与IP地址的组合得出一个网络套接字Socket

四、网络协议

1、网络通信协议

计算机网络中实现通信必须有一些约定,即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。

问题:网络协议太复杂

通信协议分层的思想

2、TCP/IP协议簇

1)TCP协议

在这里插入图片描述
在这里插入图片描述

2)UDP

3、Socket

  • IP地址 + 端口号 = socket
  • 网络通信其实就是Socket间的通信,数据在socket之间通过io流传输

socket 分类
流套接字(stream socket):使用TCP提供可依赖的字节流服务
数据报套接字(datagram socket):使用UDP提供“尽力而为”的数据报服务

五、TCP网络编程

1、基于Socket的TCP编程

Java语言的基于套接字编程分为服务端编程客户端编程,其通信模型如图所示:
在这里插入图片描述

1)客户端创建socket对象

    @Testpublic void client() {Socket socket = null;OutputStream outputStream = null;try {InetAddress inet = InetAddress.getByName("127.0.0.1");socket = new Socket(inet, 8899);outputStream = socket.getOutputStream();outputStream.write("你好,我是client".getBytes());} catch (IOException e) {throw new RuntimeException(e);} finally {try {outputStream.close();socket.close();} catch (IOException e) {throw new RuntimeException(e);}}}

2) 服务器端建立 ServerSocket对象

  • ServerSocket 对象负责等待客户端请求建立套接字连接
  • 所谓“接收”客户的套接字请求,就是accept()方法会返回一个 Socket 对象
/*** 客户端将数据发送给服务端,服务端将数据显示在 控制台上*/
public class TcpTest {@Testpublic void server() throws IOException {ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream = null;try {serverSocket = new ServerSocket(8899);socket = serverSocket.accept();inputStream = socket.getInputStream();System.out.print("收到来自" + socket.getRemoteSocketAddress() + "的消息: ");byte[] buffer = new byte[20];int len;while ((len = inputStream.read(buffer)) != -1) {String string = new String(buffer, 0, len);System.out.print(string);}} catch (IOException e) {throw new RuntimeException(e);} finally {inputStream.close();socket.close();inputStream.close();}}
}

2、UDP网络通信

  • 类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序。

  • UDP数据通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。

  • DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号

  • UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接。如同发快递包裹一样。

public class UdpTest {@Testpublic void client() {DatagramSocket ds = null;try {ds = new DatagramSocket();byte[] by = "hello,atguigu.com".getBytes();DatagramPacket dp = new DatagramPacket(by, 0, by.length, InetAddress.getByName("127.0.0.1"), 10000);ds.send(dp);} catch (Exception e) {throw new RuntimeException(e);} finally {ds.close();}}@Testpublic void server() {DatagramSocket ds = null;try {ds = new DatagramSocket(10000);byte[] by = new byte[1024];DatagramPacket dp = new DatagramPacket(by, by.length);ds.receive(dp);String str = new String(dp.getData(), 0, dp.getLength());System.out.println(str + "--" + dp.getAddress());} catch (Exception e) {e.printStackTrace();} finally {if (ds != null) ds.close();}}
}

六、URL网络编程

1、URL类

URL(Uniform Resource Locator) 统一资源定位符,他表示Internet上某一资源的地址。

通过 URL 我们可以访问 Internet 上的各种网络资源,比如最常见的 www,ftp 站点。浏览器通过解析给定的 URL 可以在网络上查找相应的文件或其他资源。

URL的基本结构由5部分组成:
<传输协议>://<主机名>:<端口号>/<文件名>#片段名?参数列表
例如:
http://192.168.1.100:8080/helloworld/index.jsp#a?username=shkstart&password=123
#片段名:即锚点,例如看小说,直接定位到章节
参数列表格式:参数名=参数值&参数名=参数值

为了表示URL,java.net 中实现了类 URL。我们可以通过下面的构造器来初始化一个 URL 对象:
在这里插入图片描述

2、URLConnection类

URLConnection:表示到URL的连接。当与一个URL建立连接时,首先要在一个 URL 对象上通过方法 openConnection() 生成对应的 URLConnection对象。如果连接过程失败,将产生IOException。

URL netchinaren = new URL ("http://www.atguigu.com/index.shtml"); 
URLConnectonn u = netchinaren.openConnection( );

通过URLConnection对象获取的输入流和输出流,即可以与现有的CGI程序进行交互。

public Object getContent( ) throws IOException
public int getContentLength( )
public String getContentType( )
public long getDate( )
public long getLastModified( )
public InputStream getInputStream( )throws IOException
public OutputSteram getOutputStream( )throws IOException

从服务器下载文件

public class URLTest1 {public static void main(String[] args) {HttpURLConnection urlConnection = null;InputStream is = null;FileOutputStream fos = null;try {URL url = new URL("http://localhost:8080/examples/beauty.jpg");urlConnection = (HttpURLConnection) url.openConnection();urlConnection.connect();is = urlConnection.getInputStream();fos = new FileOutputStream("day10\\beauty3.jpg");byte[] buffer = new byte[1024];int len;while((len = is.read(buffer)) != -1){fos.write(buffer,0,len);}System.out.println("下载完成");} catch (IOException e) {e.printStackTrace();} finally {//关闭资源if(is != null){try {is.close();} catch (IOException e) {e.printStackTrace();}}if(fos != null){try {fos.close();} catch (IOException e) {e.printStackTrace();}}if(urlConnection != null){urlConnection.disconnect();}}}
}

3、URI、URL、URN的区别

URI : uniform resource identifier 统一资源标识符,用来唯一的标识一个资源
URL: uniform resource locator 统一资源定位符,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
URN:统一资源命名符,是通过名字来标识资源,比如mailto:java-net@java.sun.com。

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

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

相关文章

SQL运算符以及使用变量参与实际的查询(增删改)操作

#关系运算符&#xff08;<>!not&#xff09;与逻辑运算符&#xff08;&and|or&#xff09;set x7,y5;select x>y as TRUE,x<y as FALSE;#正确返回值true,实际返回值1&#xff0c;false0select xy;# 判断两个数值是否相等无需使用&#xff08;&#xff09;号&am…

HTML中插入图片(2024/5/10)

背景&#xff1a; 自己做了个小网站&#xff0c;想在网页的右下角贴上自己的微信二维码&#xff0c;用以下代码就可以了。 注意&#xff0c;这里是放右下角了&#xff0c;距离和二维码的图片大小需要自己去调整。 /*二维码的名字和路径需要自己修改*/ <!DOCTYPE html>…

C++初阶学习第六弹——string(1)——标准库中的string类

前言&#xff1a; 在前面&#xff0c;我们学习了C的类与对象&#xff0c;认识到了C与C语言的一些不同&#xff0c;今天&#xff0c;我们将进入C的 关键部分——STL&#xff0c;学习完这部分之后&#xff0c;我们就可以清楚的认识到C相比于C语言的快捷与便利 一、为什么有string…

获取文件夹下的vue文件形成组件,require.context

前言&#xff1a;项目中现有一个文件里面包含所有需要用到的组件&#xff0c;如果一个个的去import&#xff0c;则会非常麻烦&#xff0c;现有require.context去实现&#xff0c; 1、require.context var request require.context(‘./module’, true, /.js$/) require.cont…

AI编码工具-通义灵码功能实测(二)

AI编码工具-通义灵码功能实测&#xff08;二&#xff09; 通义灵码智能问答 在上一篇文章中&#xff1a;https://blog.csdn.net/csdn565973850/article/details/138563670?spm1001.2014.3001.5501 讲述了通义灵码的7大应用场景&#xff0c;这里在使用过程中遇到了一些问题&…

视频剪辑一键处理技巧:批量分割视频,快速提取m3u8视频

随着网络视频的普及和多样化&#xff0c;视频剪辑和处理成为了很多用户的基本需求。在众多的视频处理技巧中&#xff0c;批量分割视频快速提取m3u8视频是常见的操作。本文将介绍如何利用云炫AI智剪一键处理的技巧&#xff0c;轻松完成这些任务&#xff0c;提高视频剪辑的效率。…

Java中的包(package)是什么和如何使用它们

目录 一、什么是Java包&#xff1f; 二、为什么使用包&#xff1f; 三、如何创建和使用包 创建包 引入包 四、包的实际应用 总结 Java中的包&#xff08;package&#xff09;是一种用于组织相关类和接口的命名空间。通过将代码逻辑地分组&#xff0c;它们有助于维护大型…

安卓提示Cannot resolve symbol ‘BuildConfig‘

安卓提示Cannot resolve symbol BuildConfig build.gradle android {...defaultConfig {...versionName "1.1.2" // 这里设置版本号...}... }java代码使用 tv_version.setText(BuildConfig.VERSION_NAME) ; 提示错误 Cannot resolve symbol BuildConfig 解决办法 bu…

QT功能 实现静态内容国际化实验

文章目录 第一步&#xff1a;新建一个QT工程第二步&#xff1a;添加控件第三步&#xff1a;在pro文件中添加内容第四步&#xff1a;更新文件第五步&#xff1a;打开QT的Linguist第六步&#xff1a;添加翻译内容第七步&#xff1a;回到QT Creator中添加文件第八步&#xff1a;给…

初阶数据结构—顺序表和链表

第一章&#xff1a;线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就…

定时监控 Docker 服务

使用 docker 启动 x服务 之后&#xff0c;为了保证服务稳定&#xff0c;需要使用脚本监控该服务&#xff1a; 脚本内容 check_x_server.sh #/bin/bashcd /data/server #存放check_x_server.sh脚本的路径time$(date "%Y%m%d-%H:%M:%S") echo $time" checki…

推荐一个开源的MES系统

软件介绍 HM-MES是一款旨在帮助工厂实现生产计划、工艺管理和质量控制的工业生产管理软件。该软件基于Java Web技术和MySql数据库开发&#xff0c;拥有简洁、易用、安全和稳定等特点&#xff0c;适用于广泛的生产管理场景。 功能描述 1.产品和原材料双向溯源&#xff0c;支持二…

【.Net动态Web API】参数模型绑定来源

🚀前言 本文是《.Net Core进阶编程课程》教程专栏的导航站(点击链接,跳转到专栏主页,欢迎订阅,持续更新…) 专栏介绍:通过源码实例来讲解Asp.Net Core进阶知识点,让大家完全掌握每一个知识点。 专栏适用于人群:Web后端开发人员 ———————————————— …

初学者理解Transformer,本文is all you need

要问现在AI领域哪个概念最热&#xff0c;必然是openAI推出chatGPT之后引发的大模型。然而这项技术的起源&#xff0c;都来自一篇google公司员工的神作“Attention Is All You Need”——本文标题也是一种致敬^_^&#xff0c;目前已有近12万的引用(还在增长)。 在“Attention Is…

二叉树-堆

树 在数据库中&#xff0c;树是一种数据结构&#xff0c;用于组织和存储数据&#xff0c;使得可以高效地进行插入、删除和查找操作。它通常用于表示层次关系或者有序集合。 基本概念 节点&#xff1a;树结构中的每个元素都称为节点。 根节点&#xff1a;树的最顶端节点。 子…

RazorSQL for Mac:强大而全面的数据库管理工具

RazorSQL for Mac是一款功能强大、操作简便的数据库管理工具。它专为Mac用户设计&#xff0c;支持连接超过30种不同类型的数据库&#xff0c;包括MySQL、Oracle、PostgreSQL等&#xff0c;为用户提供了全面的数据库管理解决方案。 RazorSQL具有强大的数据库浏览功能&#xff0c…

陈文自媒体:创业如何才能持续小成功?

最近看了一些书&#xff0c;听了一些人讲的鸡汤&#xff0c;有点启发&#xff0c;写一些个人的心得让大家参考一下。 1、对于所谓的创业来说&#xff0c;不是追求成功&#xff0c;正确的姿势是&#xff0c;应该立于不败之地&#xff0c;只有不败才有机会成功&#xff0c;怎么才…

Java基础知识(12)

Java基础知识&#xff08;12&#xff09; &#xff08;包括&#xff1a;多线程&#xff09; 目录 Java基础知识&#xff08;12&#xff09; 一.多线程 1. 多线程基础 2. 多线程的实现方式 【1】继承Thread类的方式进行实现 【2】实现Runnable接口的方式进行实现 【3】…

一文搞懂什么是外贸企业邮箱?

一文搞懂什么是外贸企业邮箱&#xff1f;外贸企业邮箱&#xff0c;也就是外贸行业使用的企业邮箱系统&#xff0c;一般需要具备海外抵达率高、安全稳定等特点&#xff0c;通过外贸企业邮箱&#xff0c;企业可以和国内国外的客户或者同事进行业务的沟通交流。 一、什么是外贸企…

asp.net mvc使用IHttpModule拦截所有请求,包括资源文件

目录 HttpApplication 类 添加App_Code文件夹 MyHttpModel2 Web.config添加配置&#xff0c;在iis模块中生效 项目发布后&#xff0c;察看注册的自定义模块 框架集&#xff1a;.NET Framework 4.7web框架&#xff1a;asp.net mvc 5 HttpApplication 类 HttpApplication 类…