计算机网络
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
常见计算机网络
- 互联网:(Internet)点与点相连,指的是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连
- 万维网:(WWW – World Wide Web)端与端相连,万维网是World Wide Web的简称,也称为Web、3W等。WWW是基于客户器端/服务器端方式的信息发现技术和超文本技术的综合
- 物联网:( IoT - Internet of things) 物与物相连,物联网(Internet of Things,简称IOT)是指通过 各种信息传感器等各种装置与技术得到各种需要的信息,通过各类可能的网络接入,实现物与物、物与人的泛在连接
- 网络编程:让计算机与计算机之间建立连接、进行通信,从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用
网络编程
OSI参考模型
OSI是一个开放性的通信系统互连参考模型,是一个协议规范。
网络七层协议
- 7 应用层
- 6 表示层
- 5 会话层
- 4 传输层
- 3 网络层
- 2 数据链路层
- 1 物理层
每层功能:
- 应用层:应用层负责文件访问和管理、可靠运输服务、远程操作服务。(HTTP、FTP、SMTP)。
- 表示层:表示层负责定义转换数据格式及加密,允许选择以二进制或ASCII格式传输。
- 会话层 :会话层负责使应用建立和维持会话,使通信在失效时继续恢复通信。(断点续传)。
- 传输层:传输层负责是否选择差错恢复协议、数据流重用、错误顺序重排。(TCP、UDP)。
- 网络层 :网络层负责定义了能够标识所有网络节点的逻辑地址。(IP地址)。
- 数据链路层:链路层在物理层上,通过规程或协议(差错控制)来控制传输数据的正确性。(MAC)。
- 物理层:物理层为设备之间的数据通信提供传输信号和物理介质。(双绞线、光导纤维)。
7、6、5、4层定义了应用程序的功能
3、2、1层主要面向通过网络的端到端,点到点的数据流
TCP/IP模型
TCP/IP是指能够在多个不同网络间实现信息传输的协议,是因特网使用的参考模型,基于TCP/IP的参考模型将协议分成四个层次,该模型中最重要的两个协议是TCP和IP协议
四层协议
- 4.应用层
- 3.传输层
- 2.网络层
- 1.网络接入层
每层功能:
- 应用层:应用层负责传送各种最终形态的数据,是直接与用户进行交互的层,典型协议是HTTP、FTP等。
- 传输层:传输层负责传送文本数据,主要协议是TCP、UDP协议。
- 网络层:网络层负责分配地址和传送二进制数据,主要协议是IP协议。
- 网络接入层:接口层负责建立电路连接,是整个网络的物理基础,典型的协议包括以太网、ADSL等等。
InetAddress类
互联网协议(IP)地址对象,封装了与该IP地址相关的所有信息,并提供获取信息的常用方法
常见方法:
public static InetAddress getLocalHost()
获得本地主机地址对象
public static InetAddress getByName(String host)
根据主机名称获得地址对象
public static InetAddress[] getAllByName(String host)
获得所有相关地址对象
public String getHostAddress()
获取IP地址字符串
public String getHostName()
获得IP地址主机名
//1.1getLocalhost()方法
InetAddress ia1=InetAddress.getLocalHost();
System.out.println("ip地址:"+ia1.getHostAddress()+" 主机名:"+ia1.getHostName());
//1.2getByName("ip地址");
InetAddress ia2=InetAddress.getByName("192.168.0.103");
System.out.println("ip地址:"+ia2.getHostAddress()+" 主机名:"+ia2.getHostName());
//1.4getByName("localhost");
InetAddress ia4=InetAddress.getByName("localhost");
System.out.println("ip地址:"+ia4.getHostAddress()+" 主机名:"+ia4.getHostName());
基于TCP的网络编程
Socket编程:
- Socket(套接字)是网络中的一个通信节点。
- 分为客户端Socket与服务器ServerSocket。
- 通信要求:IP地址 + 端口号。
TCP编程实现客户端发送数据给服务器端
服务器端
public static void main(String[] args) throws Exception{
//1 创建ServerSocket 并指定端口号
ServerSocket listener=new ServerSocket(9999);
//2 调用accept(),接收客户端请求,阻塞方法(如果没有客户端请求,则阻塞)
Socket socket=listener.accept();
//3 获取输入流,读取客户端发送的数据
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is,"utf-8"));
String data=br.readLine();
System.out.println("客户发送:"+data);
//4 关闭释放资源
br.close();
socket.close();
listener.close();
}
客户端
public static void main(String[] args) throws Exception{
//1 创建客户端套接字,并指定服务器的地址和端口号
Socket socket=new Socket("192.168.0.1", 9999);
//2 获取输出流,发送数据给服务器
OutputStream os=socket.getOutputStream();
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os,"utf-8"));
bw.write("好久不见");
//3 关闭释放资源
bw.close();
socket.close();
}
TCP编程实现客户端上传文件给服务器端
服务器端
public static void main(String[] args) throws Exception {
//1创建ServerSocket
ServerSocket listener=new ServerSocket(9999);
//2侦听,接收客户端请求
Socket socket=listener.accept();
//3获取输入流
InputStream is=socket.getInputStream();
//4边读取,边保存
FileOutputStream fos=new FileOutputStream("d:\\002.jpg");
byte[] buf=new byte[1024*4];
int count=0;
while((count=is.read(buf))!=-1) {
fos.write(buf,0,count);
}
//5关闭
fos.close();
is.close();
socket.close();
listener.close();
System.out.println("接收完毕");
}
客户端
public static void main(String[] args) throws Exception {
//1创建Socket
Socket socket=new Socket("192.168.0.103", 9999);
//2获取输出流
OutputStream os=socket.getOutputStream();
//3边读取文件,边发送
FileInputStream fis=new FileInputStream("d:\\001.jpg");
byte[] buf=new byte[1024*4];
int count=0;
while((count=fis.read(buf))!=-1) {
os.write(buf,0,count);
}
//4关闭
fis.close();
os.close();
socket.close();
System.out.println("发送完毕");
}