网站建设与管理的就业方向,网站开发前端模板,做网站流程视频,有哪些网站可以做印度市场调研1. 概念
通过网络#xff0c;让两个主机之间能够进行通信#xff0c;基于这样的通信完成一定的功能
只要满足进程不同即可#xff0c;即使是同一个主机#xff0c;只要是不同的进程#xff0c;基于网络完成编程
进行网络编程时#xff0c;需要操作系统提供一组API让两个主机之间能够进行通信基于这样的通信完成一定的功能
只要满足进程不同即可即使是同一个主机只要是不同的进程基于网络完成编程
进行网络编程时需要操作系统提供一组API通过这些API才能完成编程 API可以认为是应用层和传输层之间交互的路径Socket API 通过这套API可以完成不同主机之间不同系统之间的网络通信 传输层提供的网络协议主要是 TCP 和 UDP
这两个协议的特性工作原理差异很大使用这两个协议进行网络编程时存在一定的差异
系统分别提供了两套 API
2. TCP 和 UDP 的区别
1TCP 是有连接的UDP 是无连接的
连接是抽象的概念
连接的本质就是建立连接的双方各自保存对方的信息
两台计算机建立连接就是双方彼此保存了对方的关键信息 TCP 想要通信需要先建立连接如果对方拒绝通信无法完成 UDP 想要通信直接发送数据即可不需要对方的同意UDP 自身也不会保存对方的信息 UDP 自己不知道对方的信息但程序员要知道。UDP 本身不保存但调用UDP SocketAPI的时候要把对方的位置传送过去 2TCP 是可靠传输UDP 是不可靠传输
网络上进行通信的时候A - B发送一个消息是不可能一定到达的
所以对于可靠传输来说
A - B发送一个消息消息是否到达BA本身能感知到
进一步的就可以在发送失败的时候采取一定的措施尝试重传等 TCP 内置了可靠传输机制 UDP 没有内置可靠传输机制 可靠传输会使机制变复杂传输效率降低 3TCP 是面向字节流的UDP 是面向数据报的
此处的字节流和文件IO的字节流是一个概念
TCP 和文件操作一样以字节为单位进行传输
UDP 是按照数据报UDP数据报有严格的格式为单位进行传输 网络通信数据的基本单位 1.数据报 Datagram 2.数据包 Packet 3.数据帧 Frame 4.数据段 Segment 4TCP 和 UDP 都是全双工的
一个信道允许双向通信——全双工
一个信道只能单向通信——半双工
代码中使用一个 Socket 对象就可以发送数据也能接受数据
3.UDP 的 socket api 的使用
3.1 Socket
soketc 是操作系统的中的一个概念本质上是一种特殊文件
把网络通信和文件操作统一了
Socket 就属于是把“网卡”这个设备给抽象成文件了
往 Socket 文件中写数据相当于通过网卡发送数据
往 Socket 文件中读数据相当于是通过网卡接受数据
3.2 DatagramSocket API
DatagramSocket 是UDP Socket用于发送和接收UDP数据报
在Java中使用这个类来表示系统内部的 Socket 文件
1DatagramSocket 构造方法 DatagramSocket() 创建一个 UDP 数据报套接字的 Socket 绑定到本机任意一个随机端口 一般用于客户端 DatagramSocket(int port) 创建一个 UDP 数据报套接字的 Socket 绑定到本机指定的端口 一般用于服务端
2 DatagramSocket 方法 void receive(DatagramPacket p) 从此套接字接收数据报如果没有接收到数据报该方法会阻塞等待 void send(DatagramPacket p) 从此套接字发送数据报包不会阻塞等待直接发送 void close() 关闭此数据报套接字
3.3 DatagramPacket AP DatagramPacket 是 UDP Socket 发送和接收的数据报 使用这个类表示一个 UDP 数据报 UDP 是面向数据报的每次进行传输都是以 UDP 数据报为基本单位的 1DatagramPacket 构造方法 DatagramPacket(byte[] buf, int length) 构造一个 DatagramPacket 以用来接收数据报接收的数据保存在 字节数组第一个参数 buf 中接收指定长度第二个参数 length DatagramPacket(byte[] buf, int offset, int length, SocketAddress address 构造一个 DatagramPacket 以用来发送数据报发送的数据为字 数组第一个参数 buf 中从 0 到指定长度第二个参数 length address 指定目的主机的 IP 和端口号
2DatagramPacket 方法 InetAddress getAddress() 从接收的数据报中获取发送端主机 IP地址或从发送的数据报中获取接收端主机 IP 地址 int getPort() 从接收的数据报中获取发送端主机的端口号或从发送的数据报中获取接收端主机端口号 byte[] getData() 获取数据报中的数据 构造 UDP 发送的数据报时需要传入 SocketAddress, 该对象可以使用 InetSocketAddress 来创 建。 3.4 InetSocketAddress API InetSocketAddress SocketAddress 的子类 构造方法 InetSocketAddress(InetAddress addr, int port) 创建一个 Socket 地址包含 IP 地址和端口号