个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Java
个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~
网络编程
:
常见的软件架构
:
C/S架构
:Client/Server – 客户端/服务器,在用户本地需要下载并安装客户端程序,在远程有一个服务器程序。B/S架构
:Browser/Server – 浏览器/服务器,只需要一个浏览器,用户通过不同的网址,访问不同的服务器。网络编程三要素
:
IP
IP
全称:Internet Protocol,互联网协议地址,也称IP地址,是分配给网上设备的数字标签。
IPv4
:Internet Protocol version 4,互联网通信协议第四版。
IPv6
: Internet Protocol version 6,互联网通信协议第六版。
端口号
:协议
:计算机网络中,连接和通信的规则被称为网络通信协议。
OSI参考模型:世界互联协议标准,全球通信规范,模型过于理想化,未能在因特网上进行广泛推广。
TCP/IP参考模型(TCP/IP协议):事实上的国际标准
UDP协议
:
面向无连接
通信协议。UDP通信程序
:
发送数据:
① 创建发送端的DatagramSocket对象
②数据打包(DatagramPacket)
③发送数据
④释放资源
public class UDPSendM { public static void main(String[] args) throws IOException { //1. 创建DatagramSocket对象 // 绑定端口:通过绑定的端口向外发送数据 //空参:随机选取所有可用端口中的一个来绑定 //带参:指定端口号进行绑定 DatagramSocket datagramSocket = new DatagramSocket(); //2. 打包数据 String str = "这是使用UDP协议发送的数据";//数据 byte[] bytes = str.getBytes(); //转换成字节数组 InetAddress address = InetAddress.getByName("127.0.0.1"); //向这个主机地址发送数据 int port = 10086; //向这个端口发送数据 DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, address, port); //3. 发送数据 datagramSocket.send(datagramPacket); //4.关闭资源 datagramSocket.close(); }}
接收数据:
①创建DatagramSocket对象
②接受打包好的数据
③解析数据包
④释放资源
public class UDPReceiveM { public static void main(String[] args) throws IOException { //1. 创建DatagramSocket对象,必须绑定端口号,并与发送程序的目标端口一致 DatagramSocket datagramSocket = new DatagramSocket(10086); //2. 接收数据 byte[] bytes = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length); //receive()是阻塞的,在接收到数据前会一直等待 datagramSocket.receive(datagramPacket); //3. 解析数据 byte[] data = datagramPacket.getData(); //传输的数据 InetAddress address = datagramPacket.getAddress();//传输的地址 int length = datagramPacket.getLength();//数据长度 int port = datagramPacket.getPort();//传输的端口号 System.out.println("接收到的数据:" + new String(data,0,length)); System.out.println("数据从端口" + port + "地址" + address + "发来"); //4. 释放资源 datagramSocket.close(); }}
输出:
接收到的数据:这是使用UDP协议发送的数据数据从端口50584地址/127.0.0.1发来
UDP的三种通信方式
:
①单播: 一对一进行数据传输
②组播: 一对多进行数据传输
组播地址:224.0.0.0 ~ 239.255.255.255,其中224.0.0.0 ~ 224.0.0.225是预留的组播地址。
发送端: 第一步创建的是MulticastSocket对象,之后打包数据时目标地址改为组播地址,其余与单播一致。
MulticastSocket ms = new MulticastSocket();
接收端: 第一步创建的是MulticastSocket对象,之后将当前机器添加绑定到发送端的目标组播地址中去:
MulticastSocket ms = new MulticastSocket(10000);//获取组播地址的对象InetAddress address = InetAddress.getByName("224.0.0.1");//MulticastSocket对象添加绑定到组播地址ms.joinGroup(address);
③广播: 向所有机器进行数据传输
TCP协议
:
面向连接
通信协议。TCP通信程序
:
TCP协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,通信之前要保证连接已经建立,通过Socket产生IO流来进行网络通信。
客户端:
Socket(String host,int port)
OutputStream getOutputStream()
void close()
public class TCPClient { public static void main(String[] args) throws IOException { //1. 创建Socket对象,与服务端建立连接 Socket socket = new Socket("127.0.0.1", 10000); //2. 获取字节输出流 OutputStream outputStream = socket.getOutputStream(); //3. 发送数据 String s = "这边是客户端,你好呀服务端!"; outputStream.write(s.getBytes()); //4. 关闭资源 outputStream.close(); socket.close(); }}
服务端:
①创建服务端的Socket对象(ServerSocket)
ServerSocket(int port)
②监听客户端连接,返回一个Socket对象
Socket accept()
③获取输入流,读数据,并显示
InputStream getInputStream()
④释放资源
void close()
public class TCPServer { public static void main(String[] args) throws IOException { //1. 获取服务端Socket对象,端口号与客户端目标端口号一致 ServerSocket serverSocket = new ServerSocket(10000); //2. 返回一个Socket对象 Socket accept = serverSocket.accept(); //3. 获取字节输入流 InputStream inputStream = accept.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); //4. 获取数据,显示 int i; System.out.println("接收到数据:"); while((i = inputStreamReader.read()) != -1){ System.out.print((char)i); } //5. 释放资源 inputStreamReader.close(); accept.close(); serverSocket.close(); }}
三次握手(确保连接建立)
:
四次挥手(确保连接断开,且数据处理完毕)
:
InetAddress类的使用
:
static InetAddress getByName(String host)
:获取主机名称的IP地址,主机名称可以是机器名称,也可以是IP地址。
String getHostName()
:获取此IP地址的主机名。
String getHostAddress()
:返回文本显示中的IP地址字符串。
public class InetAddressDemo { public static void main(String[] args) throws UnknownHostException { //1. 获取InetAddress对象(一台设备的对象),传入的可以是IP地址,也可以是机器名称 InetAddress inetAddress = InetAddress.getByName("LAPTOP-TB1IVJR9"); System.out.println(inetAddress); // LAPTOP-TB1IVJR9/192.168.88.1 InetAddress inetAddress2 = InetAddress.getByName("192.168.88.1"); System.out.println(inetAddress2); // /192.168.88.1 //2. 获取InetAddress对象的设备名称 String hostName = inetAddress.getHostName(); System.out.println(hostName); // LAPTOP-TB1IVJR9 //3. 获取InetAddress对象的ip地址字符串 String hostAddress = inetAddress.getHostAddress(); System.out.println(hostAddress); // 192.168.88.1 }}
来源地址:https://blog.csdn.net/ebb29bbe/article/details/133975878
--结束END--
本文标题: 什么是网络编程?Java如何实现?三次握手和四次挥手?
本文链接: https://www.lsjlt.com/news/442158.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-01
2024-04-03
2024-04-03
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0