JAVA学习日记(二十六)网络编程

news/2024/12/17 15:26:23/

一、网络编程的概念

常见的软件架构:

 

 二、网络编程三要素

IP:设备在网络中的地址,是唯一的标识

端口号:应用程序在设备中的唯一标识

协议:数据在网络中传输的规则,常见的协议有UDP、TCP、http、https、ftp

(一)IP

全称:Internet Protocol ,是互联网协议地址,也称IP地址,是分配给上网设备的数字标签

通俗理解:上网设备在网络中的地址,是唯一的

常见IP分类为:IPv4、IPv6

IPv4概念:

IPv6概念:

 

IPv4地址分类形式:

InetAddress类的使用:

import java.net.InetAddress;
import java.net.UnknownHostException;public class Main {public static void main(String[] args) throws UnknownHostException {//获取InetAddress的对象  static inetAddress getByName(String host)//确定主机名称的ip地址,主机名称可以是机器名称,也可以是ip地址//String getHostName()  获取此IP地址的主机名//String getHostAddress() 返回文本显示中的IP地址字符串InetAddress address=InetAddress.getByName("10.102.54.27");System.out.println(address);  // /10.102.54.27String name=address.getHostName();System.out.println(name);  //LAPTOP-AIFHRFPIString ip=address.getHostAddress();System.out.println(ip);  //10.102.54.27}
}

 (二)端口号

应用程序在设备中的唯一标识。

端口号:由两个字节表示的整数,取值范围:0~65535  其中0~1023之间的端口号用于一些知名的网络服务或者应用  自己使用1024以上的端口号。

注意:一个端口号只能被一个应用程序使用

(三)协议

计算机网路中,连接和通信的规则被称为网络通信协议 

UDP协议:

用户数据报协议(User Datagram Protocol)

UDP是面向无连接通信协议,速度快,有大小限制,一次最多发送64K,数据不安全,易丢失 

(不管是否已经连接)

TCP协议:

传输控制协议TCP(Transmission Control Protocol)

TCP协议是面向连接的通信协议,速度慢,没有大小限制,数据安全

(确保连接成功)

(四)UDP通信程序 

发送数据:

import java.io.IOException;
import java.net.*;public class UDPTest {public static void main(String[] args) throws IOException {//创建DatagramSocket对象//绑定端口,以后就是通过这个端口往外发//空参:所有可用的端口中随机选择一个使用//带参:指定端口号绑定DatagramSocket dgs=new DatagramSocket();//打包数据String str="你好啊!";byte[] bytes=str.getBytes();//127.0.0.1 表示本机IPInetAddress address=InetAddress.getByName("127.0.0.1");//端口号int port=10086;DatagramPacket dgp=new DatagramPacket(bytes,bytes.length,address,port);//发数据dgs.send(dgp);//释放资源dgs.close();}}

接收数据:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class UDPTest2 {public static void main(String[] args) throws IOException {//接受数据//创建DatagramSocket对象//细节: 接收时一定要绑定端口//      端口需要和发送端口保持一致DatagramSocket dgs=new DatagramSocket(10086);//接收数据包byte[] bytes=new byte[1024];DatagramPacket dgp=new DatagramPacket(bytes,bytes.length);//receive 该方法是阻塞的//当程序执行到这一步时,会在这里死等//等发送端发送消息dgs.receive(dgp);//解析数据包byte[] data=dgp.getData();int len=dgp.getLength();InetAddress address=dgp.getAddress();int port=dgp.getPort();System.out.println("接收到数据"+new String(data));System.out.println("该数据是从"+address+"这台电脑中的"+port+"这个端口发送的");//释放资源dgs.close();}
}

三种通信方式:


 ①单播

②组播

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;public class UDPTest4 {public static void main(String[] args) throws IOException {//组播发送端代码//创建MulticastSocket对象MulticastSocket ms = new MulticastSocket();//创建DatagramPacket对象String s="你好啊~~~";//打包数据byte[] bytes = s.getBytes();//指定组播地址224.0.0.1InetAddress address = InetAddress.getByName("224.0.0.1");//端口号int port = 1000;DatagramPacket dgp = new DatagramPacket(bytes, bytes.length, address, port);//发数据ms.send(dgp);//释放资源ms.close();}}import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;public class UDPTest3 {public static void main(String[] args) throws IOException {//组播接收端代码//创建MulticastSocket对象MulticastSocket ms=new MulticastSocket(1000);//将当前本机,添加到224.0.0.1的这一组当中InetAddress address=InetAddress.getByName("224.0.0.1");ms.joinGroup(address);//创建DatagramPacket数据包对象byte[] bytes=new byte[1024];DatagramPacket dp=new DatagramPacket(bytes,bytes.length);//接受数据ms.receive(dp);//解析数据byte[] data=dp.getData();String ip=dp.getAddress().getHostAddress();String name=dp.getAddress().getHostName();System.out.println("ip为:"+ip+",主机名为:"+name+",的人,发送了数据:"+new String(data));ms.close();}
}
③广播

(五)TCP通信程序

 

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;public class TCPTest1 {public static void main(String[] args) throws IOException {//TCP协议发送端//创建Socket对象//在创建对象的同时会连接服务器//如果连接不上,代码会报错Socket socket=new Socket("127.0.0.1",1000);//从连接通道种获取输出流OutputStream ops=socket.getOutputStream();//写出数据ops.write("你好啊".getBytes());//释放资源ops.close();socket.close();}
}import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class TCPTest2 {public static void main(String[] args) throws IOException {//TCP协议接收端//创建ServerSocket对象ServerSocket socket=new ServerSocket(1000);//监听客户端的链接Socket socket1=socket.accept();//从连接通道中获取输入流,读取数据(不能传中文)InputStream ips=socket1.getInputStream();//使用转换流转化为字符流InputStreamReader isr=new InputStreamReader(ips);//为了读取效率,再套一个缓冲流BufferedReader br=new BufferedReader(isr);String s;while((s=br.readLine())!=null){System.out.println(s);}//释放资源ips.close();socket1.close();socket.close();}
}

三次握手:

作用:确保连接建立

四次挥手:

作用:确保连接断开,且数据处理完毕


http://www.ppmy.cn/news/1555886.html

相关文章

ES常用API以及Java使用RestClient操作ES教程

ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。官方文档地址: Elasticsearch Clients | Elastic。由于ES目前最新版本是8.16,提供了全新版本的客户端,老版本的…

【Unity基础】AudioSource 常用方法总结

在 Unity 中,AudioSource 组件用于控制音频的播放和管理。以下是常用的 AudioSource 控制方法及其说明。 1. 播放和暂停音频 Play():开始播放音频,如果是从暂停的地方继续播放,可以直接调用。Pause():暂停当前播放的…

HIK 相机 设置缓存节点进行取流

场景:【硬触发】环境触发频率快时,相机内缓存图片(默认节点数量为1)有可能被不停刷新,导致无法及时捕捉到每次触发响应的图片。 方案:SDK中可以设置相机内部缓冲节点数量和取图策略。 nRet MV_CC_SetImag…

水表的数字表盘分割数据集labelme格式3023张13类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):3023 标注数量(json文件个数):3023 标注类别数:13 标注类别名称:["readbox_1","center",&q…

哈尔滨工业大学《2024年801自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《哈尔滨工业大学801自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2024年真题 Part1:2024年完整版真题 2024年真题

前端安全实践:常见攻击的防范与处理

"用户信息被盗了!"周一早上,运营总监急匆匆地冲进办公室。原来是有用户反馈自己的账号在不知情的情况下被他人登录了。作为前端负责人,我立即组织团队开展安全排查。 这次事件让我们意识到,前端安全不容忽视。虽然之前也做过一些安全防护,但显然还不够完…

外国人永久居留证查验接口如何集成?JavaScript翔云永居证查验

在全球化的今天,越来越多的外国友人选择在中国长期居住和工作,而获得一张外国人永久居留证(简称“永居证”)是融入中国社会的重要一步,持有永居证在华的外国友人将享受诸多便利和服务。因此,当涉及到需要对…