1 网络编程

概述:网络编程就是用来实现 网络互联的 不同计算机上 运行的程序间 可以进行数据交互。即:用来实现不同电脑之间的数据通信的

三要素

  • IP地址:设备在网络中的唯一标识.
    组成:网络(关)号码 + 主机地址. //例如: 192.168.10.66
    分类:
    局域网: 3 + 1, 即: 前3段是网关号码, 最后一段是ip地址.例如: 192.168.37.0 到 192.168.37.255 理论上来讲最大支持256个IP.
    广域网: 2 + 2
    城域网: 1 + 3
    一个特殊的IP:127.0.0.1 本地回环(回路)地址, 即: 表示本机.
  • 端口号:程序在设备上的唯一标识。
    **范围:**0 到 65535, 其中0 到 1023已经被系统占用了或者用作保留端口, 我们在使用端口号的时候要避开这个区间.
  • 协议:就是程序间进行交互, 通信的规则.
    分类:
    UDP: //举例: QQ群聊, 微信群聊
  • 面向无连接.
  • 采用数据报包的形式发送数据, 每个包的大小不能超过64KB.
  • 是不安全(不可靠)协议.
  • 效率相对比较高.
  • 不区分服务器端和客户端, 叫: 发送端和接收端.

视频会议通常采用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议

TCP: //举例: 打电话

  • 面向有连接(三次握手)
  • 采用IO流的形式发送数据, 理论上来讲数据无大小限制.
  • 是安全(可靠)协议.
  • 效率相对比较低.
  • 区分服务器端和客户端.

第一次握手,客户端向服务器端发出连接请求,等待服务器确认。第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。第三次握手,客户端再次向服务器端发送确认信息,确认连接。

完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛。例如上传文件、下载文件、浏览网页等

常用DOS指令:

  • ipconfig /all 查看本机ip
  • ping ip地址 -t 测试网络连接.

InetAddress类

概述:此类表示Internet协议(IP)地址

常用方法

方法名

说明

static InetAddress getByName(String host)

确定主机名称的IP地址。主机名称可以是机器名称,也可以是IP地址

String getHostName()

获取此IP地址的主机名

String getHostAddress()

返回文本显示中的IP地址字符串

2 UDP

概述:UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念。Java提供了DatagramSocket类作为基于UDP协议的Socket。

发送端

  • 构造方法

方法名

说明

DatagramSocket()

创建数据报套接字并将其绑定到本机地址上的任何可用端口

DatagramPacket(byte[] buf,int len,InetAddress add,int port)

创建数据包,发送长度为len的数据包到指定主机的指定端口

  • DatagramSocket常用方法

方法名

说明

void send(DatagramPacket p)

发送数据报包

void close()

关闭数据报套接字

void receive(DatagramPacket p)

从此套接字接受数据报包

  • 步骤
    创建发送端的Socket对象(DatagramSocket)
    创建数据,并把数据打包
    调用DatagramSocket对象的方法发送数据
    关闭发送端

接收端

  • 构造方法

方法名

说明

public DatagramSocket(int port)

创建数据报套接字并将其绑定到指定端口号

DatagramPacket(byte[] buf, int len)

创建一个DatagramPacket用于接收长度为len的数据包

  • DatagramPacket常用方法

方法名

说明

byte[] getData()

返回数据缓冲区

int getLength()

返回要发送的数据的长度或接收的数据的长度

  • 步骤
    创建接收端的Socket对象(DatagramSocket)
    创建一个数据包,用于接收数据
    调用DatagramSocket对象的方法接收数据
    解析数据包,并把数据在控制台显示
    关闭接收端

两种方式接受键盘输入的数据:

//采用JDK封装好的类实现
Scanner sc = new Scanner(System.in);

//自定义封装键盘录入
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

3 TCP

概述:Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信。Java为客户端提供了Socket类,为服务器端提供了ServerSocket类。

客户端

  • 构造方法

方法名

说明

Socket(InetAddress address,int port)

创建流套接字并将其连接到指定IP指定端口号

Socket(String host, int port)

创建流套接字并将其连接到指定主机上的指定端口号

  • 常用方法

方法名

说明

InputStream getInputStream()

返回此套接字的输入流

OutputStream getOutputStream()

返回此套接字的输出流

服务端

  • 构造方法

方法名

说明

ServletSocket(int port)

创建绑定到指定端口的服务器套接字

  • 常用方法

方法名

说明

Socket accept()

监听要连接到此的套接字并接受它