Lazy loaded image
编程
📙Day20-网络编程(socket通信)
字数 2582阅读时长 7 分钟
2019-1-31
2025-8-13
type
status
date
slug
summary
tags
category
icon
password

网络编程的三要素

  • IP地址:找到对方主机,点分十进制,每个数字都是由 [0,255]的整数组成eg"192.168.31.1" Java使用的是 InetAddress类来表示一个IP地址对应的主机
  • 端口号:找到主机上对应的应用程序,1024之前的端口不能使用,知名的端口号也不要使用比如 3306 MySQL
  • 协议:规定数据的传输方式,TCP/IP参考模型(应用层、传输层、网络层、物理+数据链路层)
InetAddress不能直接创建一个实例对象,需要调用静态方法返回一个实例对象,此类的一个对象就代表着一个具体的IP地址, getByName(String ip): 根据IP地址获取到对应的主机。 getLocalHost main方法声明处需要throws
UnknownHostException

实现网络通信需要解决的两个问题

  1. 如何准确地定位网络上一台或多台主机;定位主机上的特定的应用.
  1. 找到主机后如何可靠高效地进行数据传输

IP的理解

  1. IP:唯一的标识 Internet 上的计算机(通信实体)
  1. 在Java中使用InetAddress类代表IP
  1. IP分类:IPv4 和 IPv6 ; 万维网 和 局域网
  1. 域名: www.baidu.com www.mi.com www.sina.com www.jd.com

域名解析

域名容易记忆,当在连接网络时输入一个主机的域名后,域名服务器(DNS)负责将域名转化成IP地址,这样才能和主机建立连接。

localhost

本地回路地址:127.0.0.1 对应着:localhost

常用方法

  • getHostName():返回本地主机的标准主机名
  • getHostAddress():返回主机的IP地址
端口号于IP地址的组合得出一个网络套接字:Socket

OSI对比TCP/IP

notion image

TCP对比UDP

notion image

TCP三次握手和四次挥手

notion image
notion image

UDP

UserDatagramProtocol:用户数据报协议 特点: 面向无连接的,收发双发在传递数据之前不需要提前建立连接 没有严格的客户端和服务器之分
UDP传输数据有可能会丢失,效率较高,每次发送数据的范围是64K, 可以用于 视频会议 UDP里通信使用的套接字类型 是 DatagramSocket类

TCP/IP

TransmissionControlProtocol 传输控制协议 面向连接的协议: 收发双方在发送数据之前,先建立好连接(三次握手) 数据发送完成以后,还要再有四次挥手 TCP连接有严格的客户端和服务器之分,特点: 数据传输安全,传输效率低 TCP客户端使用的是 Socket 类,服务器端使用的是 ServerSocket

URL

Uniform Resource Locator,统一资源定位符,对应着互联网的某一资源地址

URL的五个结构

notion image

URL常用方法

notion image

读取、下载对应的url资源

FTP

本案例由文件下载服务器和文件下载客户端组成

HTTP服务器

  • 常用方法
ServerSocket(): 空参构造方法,端口随机分配 ServerSocket(int port): 指定端口 ServerSocket(int port,int backlog): 指定端口和积压 backlog 积压堆积 ServerSocket(int port,int backlog,InetAddredss address): 指定端口号和积压,并指定绑定的地址,address需要本机的IP 127.0.0.1/ localhost: 只能本机通过 127.0.0.1 访问,其他客户端无法访问 192.168.31.160: 本机和其他主机都能通过IP地址访问。本机不能再使用 127.0.0.1访问 对于动态IP地址来说,不合适 0.0.0.0: 表示本机所有可用的地址,如果不指定,绑定的IP地址就是 0.0.0.0 本机可以通过 IP地址和127.0.0.1 访问,其他主机可以通过 IP地址访问
上一篇
Day19-IO流与多线程
下一篇
Day21-反射和注解