当前位置: 首页 > news >正文

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

一、网络编程的概念

常见的软件架构:

 

 二、网络编程三要素

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.mrgr.cn/news/80273.html

相关文章:

  • Javafx.麦当劳点餐系统(Java简洁版)
  • 创建vue3项目步骤以及安装第三方插件步骤【保姆级教程】
  • 2024小迪安全信息收集第二课
  • OpenCV相机标定与3D重建(16)将点从齐次坐标转换为非齐次坐标函数convertPointsFromHomogeneous()的使用
  • 前端将base64转pdf页面预览
  • doxygen–自动生成文档工具
  • MySQL 主从复制与高可用架构
  • 金蝶云苍穹踩过的坑(慢慢更新)
  • Java21 虚拟线程
  • epoll反应堆模型
  • python导出requirements.txt的方法
  • 浅议Flink lib包下的依赖项
  • Mybatisplus教学
  • 基线检查:Windows安全基线.【手动 || 自动】
  • SQL server学习05-查询数据表中的数据(上)
  • gorm源码解析(二):核心设计与初始化
  • 计算机网络知识点全梳理(二.HTTP知识点总结)
  • PostgreSQL JSON/JSONB 查询与操作指南
  • git使用教程(超详细)-透彻理解git
  • 计算机网络知识点全梳理(一.TCP/IP网络模型)
  • Python自动化操作文档系列
  • 【Flink-scala】DataStream编程模型之延迟数据处理
  • vscode+msys2+clang+xmake c++开发环境搭建
  • 2024CAT开发测试 Web应用赛道
  • Nginx配置示例教程
  • ARM64平台实时linux操作系统xenomai4(EVL)构建安装简述