当前位置: 代码迷 >> 综合 >> JAVA基础 day15 网络编程
  详细解决方案

JAVA基础 day15 网络编程

热度:64   发布时间:2024-02-09 04:41:24.0

网络可分为局域网,城域网,广域网

OSI

Open System interconnection
开放式互联系统
在这里插入图片描述

TCP/IP模型

在这里插入图片描述

传输层协议

TCP协议: Transmission Control Protocol 传输控制协议
? 是一种面向连接的、可靠的、基于字节流的传输层通信协议。数据大小无限制。建立连 接的过程需要三次握手,断开连接的过程需要四次挥手。

? UDP协议: User Datagram Protocol 用户数据报协议
? 是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,每个包的大小 64KB。

网络层协议

IP协议 Internet Protocol Address
互联网协议地址/网际协议地址 ? 分配给互联网设备的数字标签(唯一标识)。
? IP地址分为两种:

IPV4:4字节32位整数,并分成4段8位的二进制数,每8位之间用圆点隔开,
每8位 整数可以转换为一个0-255的十进制整数。
格式:D.D.D.D 例如:255.255.255.255

IPV6:16字节128位整数,并分成8段十六进制数,每16位之间用圆点隔开,每16 位整数可以转换为一个0~65535的十进制数。
格式:X.X.X.X.X.X.X.X 例如:FFFF.FFFF.FFFF.FFFF.FFFF.FFFF.FFFF.FFFF

Port端口号

端口号:在通信实体上进行网络通讯的程序的唯一标识
一个端口号只能被一个程序使用,一个程序可以占用多个端口号
在这里插入图片描述

常用 端口号
MySql 3306
Oracle 1521
Tomcat 8080
SMTP 25
Web服务器 80
FTP服务器 21

InetAddress

一个域名可对应多个IP,一个IP可对应多个域名

				//(1)本机地址(推荐使用前两种)InetAddress ia1=InetAddress.getLocalHost();System.out.println(ia1.getHostAddress()+"---"+ia1.getHostName());InetAddress ia2=InetAddress.getByName("10.0.139.195");System.out.println(ia2.getHostAddress()+"---"+ia2.getHostName());InetAddress ia3=InetAddress.getByName("localhost");System.out.println(ia3.getHostAddress()+"---"+ia3.getHostName());InetAddress ia4=InetAddress.getByName("127.0.0.1");System.out.println(ia4.getHostAddress()+"---"+ia4.getHostName());//(2)局域网InetAddress ia5=InetAddress.getByName("10.0.139.119");System.out.println("三秒内是否可达"+ia5.isReachable(3000));System.out.println(ia5.getHostAddress()+"---"+ia5.getHostName());//(3)外网地址//getByName 获得一个InetAddress[] allByName = InetAddress.getAllByName("www.baidu.com");for (InetAddress address : allByName) {System.out.println(address.getHostAddress()+"---"+address.getHostName());}

Socket

分为客户端Socket与服务器ServerSocket

使用流放松或接收数据

通信要求:IP地址 + 端口号。

基于TCP的服务器端

服务端步骤:
1.创建服务器套接字,并绑定端口号
2.监听客户连接,返回Socket,阻塞方法
3.获取输出,输出流
到网卡 输入
出网卡 输出
4.处理数据
5.关闭资源

		//1.创建服务器套接字,并绑定端口号ServerSocket serverSocket=new ServerSocket(13579);//2.镇定客户连接,返回Socket,阻塞方法,直到客户端连接Socket accept = serverSocket.accept();//3.获取输入流InputStream inputStream = accept.getInputStream();BufferedReader br=new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));//4.处理数据System.out.println(br.readLine());//5.关闭br.close();serverSocket.close();accept.close();

客户端步骤

1.创建客户端套接字Socket,并制定服务的地址和端口号
2.获取输入,输出流
3.处理数据
4.关闭资源

		//1.创建客户端套接字Socket,并制定服务的地址和端口号,自动建立三次握手Socket socket = new Socket("10.0.139.119", 8888);//2.获取输入流OutputStream outputStream = socket.getOutputStream();BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8"));//3.处理数据bw.write("chichi yyds");bw.newline();//发送时要添加换行符,避免读取时readLine()方法卡死bw.flush();//4.关闭数据bw.close();socket.close();

当接收到空值时,时服务器或者客户端某个关了

  相关解决方案