涉及知识点
-
io的基本操作
-
文件上传 --- 文件系统 与 内存之间的读取 操作
1 入门
1.1 网络编程三要素
协议 + IP + port
1.2 DOS常用命令:
ipconfig:查看本机IP地址
ping IP地址:检查网络是否连通
1.3 应用
一个对象 ---- InetAddress
代码演示
public class InetAddressDemo {
public static void main(String[] args) throws UnknownHostException {
//InetAddress address = InetAddress.getByName("itheima");
InetAddress address = InetAddress.getByName("192.168.1.66");
//public String getHostName():获取此IP地址的主机名
String name = address.getHostName();
//public String getHostAddress():返回文本显示中的IP地址字符串
String ip = address.getHostAddress();
System.out.println("主机名:" + name);
System.out.println("IP地址:" + ip);
}
}
2 UDP通信程序
2.1 UDP 发送数据【应用】
Java中的UDP通信
UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个
Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户
端和服务器的概念
Java提供了DatagramSocket类作为基于UDP协议的Socket
2.2 UDP三种通讯方式【理解】
单播
单播用于两个主机之间的端对端通信
组播 --- 客户端 发组播地址 服务端将自己的IP绑定到这个组播地址
组播用于对一组特定的主机进行通信
广播 --- 客户端 发广播地址 225.225.225.225 (四个225)
广播用于一个主机对整个局域网上所有主机上的数据通信
3 TCP发送数据【应用】
Java中的TCP通信
Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并
通过Socket产生IO流来进行网络通信。
Java为客户端提供了Socket类,为服务器端提供了ServerSocket类
4 TCP 程序文件上传练习【应用】
5 文件上传的优化
5.1 文件名字重复问题
uuid
5.2 并发操作
server端要循环接收 客户端发来的请求
使用线程来完成操作 --- 计网的理论
不要显示创建线程,要使用线程池创建线程
偏底层,与业务无关
网络编程API --- socket编程
五层:物理层 链路层 网络层 传输层 应用层
由操作系统内核中的内核协议栈,负责TCP/IP协议,对应用是中立的
操作系统向上暴露socket的API给应用层
TCP控制连接
重点:网络IO操作
java IO模型
涉及操作系统给得不同的函数
io的两次过程 数据从网卡拷贝到内核空间 ,又从内核空间拷贝到用户空间
阻塞与非阻塞io
非阻塞 --- 应用做个轮询
阻塞 --- b = os.read() != -1
同步与异步
同步 --- 应用程序主动去问os
异步 --- 一般是非阻塞,在os写一个回调函数,os主动往应用传
常见的IO模型
上层控制不了,只有os来提供的能力
os提供的IO模型
NIO底层基于IO的多路复用技术
复用IO的基本思路就是通过select或poll、epoll来监控多fd ,来达到不必为每个fd创建一个对应的监控线程,从而减少线程资源创建的目的。复用IO模型的优势并不是对于单个连接能处理得更快,而是在于能处理更多的连接。
socket是一种特殊的文件,它也有文件描述符,进程可以打开一个socket,并且像处理文件一样对它进行read()和write()操作,而不必关心数据是怎么在网络上传输的