Java网络编程

Java 网络编程(超级详细) 1. 网络编程 1.1 网络编程概述 计算机网络 是指将地理位置相同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及通信协议的管理和协调下,实现资源共享和信息传递的计算机系统 1.2 网络编程三要素 1、IP地址 要想让网络中的计算机能够互相通信,必须为计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机,而IP地址就是这个标识号,也就是设备的标识。 2、端口 网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程 阅读详情
一、网络编程概述
  ①Java是Internet上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。
  ②Java提供的网络类库,可以实现无痛的网络连接,网络的底层细节被隐藏在Java的本机安装系统里,由JVM进行控制。并且Java实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境。
二、网络的目的

  直接或间接地通过网络协议与其它计算机进行通讯。

三、要想实现网络传输,需要考虑以下两个问题
  问题一:要想实现网络传输,需要考虑的问题有哪些?
 1.使用IP地址定位互联网上一台主机;使用端口号定位一个应用。
 2.要想是想网络传输,要先创建一个 InetAddress  类,我们通过以下方法建立 InetAddress  类:
    ①InetAddress inet = InetAddress.getByName(host);  //这里 host 指的是主机的IP地址
    ②InetAddress inet1 = InetAddress.getLocalHost();    //获取本机的InetAddress对象
 3.①String hostName = inet.getHostName();  //获取域名
    ②String hostAddress = inet.getHostAddress();//返回主机IP地址
  问题二:如何才能进行可靠的、高效的数据传输?
  要使实现可靠、高效的数据传输,必须通过网络通信协议。根据下图,了解网络通信协议:
  
   在java.net包中提供了两种常见的网络协议的支持:
    ①TCP:TCP是传输控协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称为TCP/IP。
    ②UDP:UDP是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。

   TCP和UDP的优缺点:
    1、TCP协议
    ①使用TCP协议前,须建立TCP链接,形成传输数据通道。
    ②传输前,采用“三次握手”方式,是可靠的。
    ③TCP协议进行通信的两个应用进程:客户端、服务端。
    ④在连接中可进行大数据量的传输。
    ⑤传输完毕,需释放已建立的连接,效率低。
   2.UDP协议
    ①将数据、源、目的封装成数据包,不需要建立连接。
    ②每个数据报的大小限制在64K内。
    ③因无需连接,故是不可靠的。
    ④发送数据结束时无需释放资源,速度快。
四、Socket 编程
  套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。

  当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行进行通信。

  java.net.Socket 类代表一个套接字,并且 java.net.ServerSocket 类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。
五、基于TCP_IP协议的网络编程
 以下步骤在两台计算机之间使用套接字建立TCP连接时会出现:
  ①服务器实例化一个 ServerSocket 对象,表示通过服务器上的端口通信。
  ②服务器调用 ServerSocket 类 的 accept() 方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。
  ③服务器正在等待时,一个客户端实例化一个Socket对象,指定服务器名称和端口号来请求连接。
  ④Socket 类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个 Socket 对象能够与服务器进行通信。
  ⑤在服务器端,accept() 方法返回服务器上一个新的 socket 引用,该 socket 连接到客户端的 socket。
  ⑥连接建立后,通过使用I/O流在进行通信。每一个 socket 都有一个输出流和一个输入流。客户端的输出流连接到服务器端的输入流,而客户端的输入 流连接到服务器端的输出流。

  下面我们通过一个TCP编程的例子来模仿一下客户端与服务端的交互:(注:以下代码的异常处理要严格按照 try-catch-finally 代码块处理,本例为节省代码长度,不做处理)
  客户端代码:
//1.创建一个 Socket 对象,通过构造器指明服务端的IP地址以及接收程序的端口号
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9090);
//2.getOutputStream():发送数据,方法返回 OutputStream 的对象
OutputStream os = socket.getOutputStream();
//3.具体的输出流程
os.write("我是客户端请多关照!".getBytes());
//4.关闭相应的流和 Socket 的对象
os.close();
socket.close();
  服务端代码:
//1.创建一个 ServerSocket 对象,通过构造器指明自身的端口号
serverSocket = new ServerSocket(9090);
//2.调用其accept()方法,返回一个 Socket 的对象
s = serverSocket.accept();
//3.调用 Socket 对象的getInputStream()方法获取一个从客户端发送过来的输入流
is = s.getInputStream();
//4.对获取的输入流进行的操作
byte[] b = new byte[20];
int len;
while ((len = is.read(b)) != -1) {
    String str = new String(b, 0, len);
    System.out.println(str);
}
System.out.println("收到来自于" + s.getInetAddress().getHostAddress() + "的连接");
//5.关闭相应的流以及 Socket、ServerSocket 的对象
is.close();
s.close();
serverSocket.close();

六、基于UDP_IP协议的网络编程
  1.UDP网络通信
   ①类 DatagramSocket 和 DatagramPacket 实现了基于UDP协议的网络程序。
   ②UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不确定什么时候可以抵达。
   ③DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。
   ④UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的链接。
  2.UDP网络通信流程:
   ①DatagramSocket 和 DatagramPacket。
   ②建立发送端,接收端。
   ③建立数据包。
   ④调用 Scoket 的发送、接收方法。
   ⑤关闭 Scoket。
  3.发送端与接收端是两个独立的运行程序。  
  
  下面我们通过一个UDP编程的例子来模仿一下发送端和接收端的交互:(注:以下代码的异常处理要严格按照 try-catch-finally 代码块处理,本例为节省代码长度,不做处理)
  发送端代码:
//1.这里我们创建一个空参的 DatagramSocket 对象,我们将IP地址和端口号放到数据报中
DatagramSocket ds = new DatagramSocket();
//2.准备好要发送的数据
byte[] b = "你好,我是要发送的数据".getBytes();
/**
 * 创建一个数据报,每一个数据报不能大于64k,都记录着数据信息、发送端IP、端口号以及要发送到的接收端的IP、端口号
 * DatagramPacket(byte buf[], int offset, int length, InetAddress address, int port)
 * @param   buf      包数据。
 * @param   offset   包数据偏移量。
 * @param   length   包数据长度。
 * @param   address  目的套接字地址。
 * @param   port     目的端口号。
*/
DatagramPacket packet = new DatagramPacket(b, 0, b.length, InetAddress.getByName("127.0.0.1"), 9090);
//4.调用 Scoket 的发送方法
ds.send(packet);
//5.关闭 Scoket
ds.close();
  接收端代码:
//1.创建一个 DatagramSocket 对象,此处需要有端口号这个参数,指明使用哪个应用来接收信息
DatagramSocket ds = new DatagramSocket(9090);
//2.创建一个数组
byte[] b = new byte[1024];
//3.创建一个数据报来接收发送端发过来的数据信息
DatagramPacket packet = new DatagramPacket(b, 0, b.length);
//4.调用 Scoket 的接收方法
ds.receive(packet);
//5.通过字符串输出一下,来看一下接收的信息是否正确
String str = new String(packet.getData(), 0, packet.getLength());
System.out.println(str);
//6.关闭 Scoket
ds.close();
  这样就能实现一个简单的UDP的网络通信。
七、URL编程
  1.URL:URL全称统一资源定位符,它表示 Internet 上某一资源的地址。通过URL我们可以访问 Internet 上的各种网络资源,比如常见的www,ftp站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其它资源。
  2.URL的基本结构有5部分组成:
   ①<传输协议>://<主机名>:<端口号>/<文件名>
   例如:https://192.168.100.189:8080/helloworld.index.jsp
  3.创建URL对象:URL url = new URL(String spec); //此处的 spec 为文件的路径
   例如:http://127.0.0.1:8080/examples/hello.txt
  4.获取属性的方法
   public String getProtocol()  获取该URL的协议名
   public String getHost()      获取该URL的主机名
   public String getPort()      获取该URL的端口号
   public String getPath()      获取该URL的文件路径
   public String getFile()      获取该URL的文件名
   public String getRef()       获取该URL在文件中的相对位置
   public String getQuery()     获取该URL的查询名
  5.①URL的方法openStream():能从网上读取数据
  ②若希望输出数据,例如向服务端的程序发送一些数据,则必须先与URL建立连接,然后才能对其进行读写,此时需要使用 URLConnection。
  ③URLConnection:表示到URL所引用的远程对象的连接。当与一个URL建立连接时,首先要在一个URL对象上通过方法openConnection()生成对应的 URLConnection 对象。如果连接过程失败,将产生IOException。

  下面我们分析一个URL编程的例子:(注:以下代码的异常处理要严格按照 try-catch-finally 代码块处理,本例为节省代码长度,不做处理)、
  此处我们使用本地的 Tomcat 服务器上的资源进行测试:先启动好本地 Tomcat 服务器,新建一个hello.txt 文件

//创建一个URL对象
URL url = new URL("http://127.0.0.1:8080/examples/hello.txt");
//如何将服务端的资源读取进来openStream
InputStream is = url.openStream();
byte[] b = new byte[20];
int len;
while ((len = is.read(b)) != -1) {
    //打印在控制台上
    String str = new String(b, 0, len);
    System.out.println(str);
}
//如果既有数据的输入又有数据的输出则考虑使用URLConnection
//将在服务器 hello.txt 文件中读取出来的信息保存到 abc.txt 文件中
URLConnection urlConn = url.openConnection();
InputStream is1 = urlConn.getInputStream();
FileOutputStream fos = new FileOutputStream(new File("abc.txt"));
byte[] b1 = new byte[20];
int len1;
while ((len1 = is1.read(b1)) != -1) {
    fos.write(b1, 0, len1);
}
is.close();
fos.close();
is1.close();
 这样就能将文件里面的内容打印在控制台中了,如果本地 Tomcat 服务器中放的资源是视频文件,我们可以创建一个接收视频文件的流来接收此文件,就能做到将视频文件下载到本地。其实我们对于URL编程并不陌生,我们经常使用的迅雷就是使用了URL编程的知识来实现的,通过一个URL地址来下载网络服务器上的资源。好啦,快点动手试一试吧。

JAVA 网络编程 文章目录1. 网络编程2.计算机网络基础知识2.1 计算机网络:2.2 网络通讯的要素2.3 IP地址2.3.1 IP地址的分配2.3.2 IP地址的分类3. 端 口4. 常用默认端口5.网络通信协议/接口6. OSI的七层模型7. TCP协议8. IP协议(Internet Protocol/因特网互联协议)是网络上的计算机进行连接的基础9. TCP/IP协议9.1 InetAddressSoc... 阅读详情

相关推荐

java网络编程

通信双方地址IP端口号一定的规则(即:网络通信协议。有两套参考模型)OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广TCP/IP参考模型(或TCP/IP协议):事实上的国际标准。

Welisit的博客 1068

Java网络

Java网络

m0_51435825的博客 1061

嵌入式SPI总线抽象设计:跨平台驱动与分层解耦实践

SPI(串行外设接口)是嵌入式系统中应用最广泛的同步串行通信协议,其核心价值在于高吞吐、低开销与硬件简洁性。其工作原理基于主从架构、全双工/半双工时序及片选(CS)控制,依赖CPOL/CPHA组合定义四种标准模式。在工程实践中,SPI常面临硬件资源受限、多外设共用总线、MCU平台迁移等挑战,导致驱动复用率低、维护成本高。通过结构体+函数指针实现的分层抽象——将物理总线、协议适配与设备驱动解耦,可显著提升代码可移植性与扩展性。该方法天然支持硬件SPI与GPIO模拟SPI双模式切换,并已在STM32等主流MCU

weixin_42601134的博客 60

Java程序员从笨鸟到菜鸟之(十三)java网络通信编程

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.youkuaiyun.com/csh624366188 首先声明一下,刚开始学习java网络通信编程就对他有一种畏惧感,因为自己对网络一窍不通,所以。。。呵呵。。你懂得,昨天又仔细的学习了一遍,感觉其实java网络编程也没想象的那么难,不信,咱一起看看。。。呵呵。。 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据。程序员所...

long_yu2的专栏 452

多普勒效应及多普勒频移的简单推导

多普勒频移的简单推导

m0_47867419的博客 3万+

Android Studio连接手机详细教程(包含遇到的问题集)

如果以上内容全都调试正确了,还是存在这个无法安装的问题,多半是一开始用的别的手机进行调试安装,然后抽掉线重新换上另一个手机安装调试才会报错。无法识别的 USB 设备,跟这台计算机连接的前一个 USB 设备工作不正常,Windows 无法识别它。此时,我的开发者选项已经开启,并且windows系统和android studio已经能够识别我的设备了,但还是报了这样的错误。右击你的手机——>更新驱动程序——>浏览我的计算机以查找驱动程序软件。右击此电脑——>属性——>设备管理器——>便携设备。

IT小郭的技术博客 4万+

第二十一章Java网络编程

socket

你好, 我在学java的博客 2403

开源LocalAI本地人工智能安装教程

LocalAI是一款能在本地运行的人工智能应用,它兼容了OpenAI API规范,它可以在普通的电脑运行,不需要GPU,也不需要联网,音频转录

2301_78652552的博客 3615

Java---网络

Java网络编程、通信协议、三次握手、四次挥手、TCP、UDP

qq_56797899的博客 612

从模型车到真实路口:基于YOLOv5-Lite与SORT的轻量化车流量检测系统实战

本文详细阐述了如何将基于YOLOv5-Lite与SORT的轻量化车流量检测系统从毕业设计原型部署到真实路口。文章聚焦于解决在嵌入式平台(如树莓派)上实现实时、稳定检测的工程挑战,涵盖数据采集、模型微调、系统集成及动态信号灯策略,为智能交通灯系统提供了实用的轻量化解决方案。

weixin_29179311的博客 126

Golang面试(一)莉莉丝游戏-Golang后端开发-中台部门

莉莉丝游戏-Golang后端开发-中台部门 开场白,双方自我介绍,对方介绍这个岗位情况,erlang语言,全部转向go。 聊项目,介绍IM架构以及使用Go写的服务简介 动态扩容相关问题:平常30万,现在100万,你们现在是如何应对的? 如果让你调整架构实现动态扩容,你会怎么做?回答了kafka,是一种,应该还要使用docker和k8s以及微服务框架等 如果使用kafka,你是如何确保消息有序?回答了redis,好像没回答到那个点 消息发送失败的问题,如何做到消息不丢?回答持久化存储、拉消息和ACK 发送失

xmcy001122的专栏 3899

【Java网络编程详解】

Java网络编程是开发分布式应用程序的重要技能,它通过套接字(Socket)进行数据传输,支持TCP和UDP协议。本文将介绍Java网络编程的基础知识,包括Socket、ServerSocket、TCP通信、UDP通信、常用类和示例代码。网络编程是指在计算机之间通过网络进行数据传输和通信的编程方式。Java提供了强大的java.net包,封装了底层的网络协议,简化了网络编程。:面向连接,可靠传输,保证数据按序到达,适合文件传输、Web通信等。:面向无连接,不可靠但速度快,适合视频通话、广播消息等。

武帝为此的博客 958

Python爬虫实战:利用最新技术爬取B站视频信息

本文详细介绍了如何使用Python最新技术构建一个功能完善的B站视频信息爬虫。我们从基础爬取开始,逐步深入到反反爬策略、异步处理、数据存储和分析等高级主题。更智能的反反爬策略:使用机器学习识别验证码更高效的分布式架构:结合Kubernetes实现弹性伸缩实时数据管道:将爬取的数据实时推送到数据分析平台多平台支持:扩展支持抖音、YouTube等其他视频平台。

2201_76125261的博客 1041

Java语言的网络编程

Java网络编程是一个庞大而复杂的领域,从基本的Socket编程到高级的HTTP处理,Java提供了丰富的工具和类库供开发者使用。了解并掌握Java网络编程,可以帮助开发者构建可靠、高效的网络应用。随着技术的不断发展,网络编程的方法和工具也在不断进步,开发者应保持学习的热情与敏锐的观察力,跟上时代的步伐。希望通过本文的讲解,能帮助您对Java网络编程有更深的理解和认识。无论是构建简单的客户端-服务器模型,还是开发复杂的Web应用,Java都能提供强大的支持。

xiaocaibao777的博客 1218

YOLOv12涨点改进 | 全网独家首发Conv改进篇 | Arxiv 2025 | 引入一种新的WConv加权卷积改进YOLOv12,显著提升其特征提取能力和目标检测精度

本文提出了一种新型加权卷积(WConv)模块,通过引入最优密度函数动态调整邻域像素权重,显著提升了YOLOv12目标检测性能。WConv在保持参数数量不变的情况下,提高了模型精度(VGG准确率提升10%)、增强了小目标检测能力,并改善了多尺度特征提取。文中详细介绍了模块原理、网络结构改进方法,并提供了核心代码实现和yaml配置文件。实验表明,该方法在图像任务中最高可降低53%的损失,虽然会带来11%的时间开销,但具有优异的鲁棒性。该技术可广泛应用于2D/3D图像处理领域。

Ai缝合怪、助力小伙伴高效发论文 216

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java基础之Java网络编程详解

网络编程是现代软件开发中不可或缺的一部分,它通过网络实现了计算机之间的通信,使得信息交换和数据共享成为可能。在网络通信的实现过程中,语言的选择和工具的使用至关重要,而Java提供了强大的支持,使得开发者可以更便捷地构建网络应用程序。网络通信的核心是数据的发送与接收,而Java的网络编程模型为此提供了一套易用且高效的工具。无论是点对点的通信,还是基于更复杂协议的多节点交互,Java都能满足需求。在网络编程中,基础的通信模式是基于Socket的点对点连接,它可以实现客户端和服务器之间的直接通信。

道可道非常道 2068

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java—— 网络编程

什么是网络编程 常见软件架构 网络编程三要素:IP:InetAddress。端口号。协议:UDP协议,TCP协议

zjy_ccccc的博客 1254

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Java 基础】Java 网络编程

Java的网络编程是指使用Java语言进行网络通信的编程技术。在Java中,可以使用Socket和ServerSocket类来实现基于TCP协议的网络通信,也可以使用DatagramSocket和DatagramPacket类来实现基于UDP协议的网络通信。

激流丶的博客 1890

十二、Java网络编程

文章目录十二、Java网络编程1.网络编程入门1.1 网络编程概述【理解】1.2 网络编程三要素【理解】1.3 IP地址【理解】1.4InetAddress【应用】1.5端口和协议【理解】2.UDP通信程序2.1 UDP发送数据【应用】2.2UDP接收数据【应用】2.3UDP通信程序练习【应用】3.TCP通信程序3.1TCP发送数据【应用】3.2TCP接收数据【应用】3.3TCP通信程序练习【应用】3.4TCP通信程序练习【应用】3.5TCP通信程序练习【应用】3.6TCP通信程序练习【应用】3.7TCP通

汪随安的博客 2919

Java 之网络编程

本文详细讲解了 Java 网络编程的基础知识和实战代码,包括 TCP 和 UDP 的区别、网络编程的三要素以及使用 Socket 和 DatagramPacket 类实现网络通信。希望这些内容能够帮助各位看官深入了解 Java 网络编程。

weixin_64178283的博客 1834
上一篇: Java动态代理
下一篇: java IO流
sdecode
博客等级 码龄10年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值