1. 网络概述
2. IP地址的组成
IP地址(Internet Protocol)
唯一标识网络上的每一台计算机
IP地址的组成
32位,由4个8位二进制数组成
IP地址 = 网络地址 +主机地址
网络地址:标识计算机或网络设备所在的网段
主机地址:标识特定主机或网络设备
3. IP地址的配置和检测
查看IP地址,检测网络是否畅通
查看本机的IP地址
ipconfig
测试网络是否通畅
ping 目标IP地址
4. DNS域名解析
访问网站时,为什么输入网址而不是IP地址?
DNS:Domain Name System,域名系统
域名系统(服务)协议(DNS)是一种分布式网络目录服务,主要用于域名与 IP 地址的相互转换,以及控制因特网的电子邮件的发送。
5. 网络服务器
通常指在网络环境下,具有较高计算能力,能够提供用户服务功能的计算机。
6. 网络服务器
网络通信协议
为在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合
TCP协议(Transmission Control Protocol 传输控制协议)
面向连接的、可靠的、基于字节流的传输通信协议
UDP协议(User Datagram Protocol 用户数据报协议)
无连接的协议,在传输数据之前,客户端和服务器并不建立和维护连接
7. Socket简介
什么是Socket?
通信链路的端点就被称为“套接字”(英文名Socket)
是提供给应用程序的接口
Socket的底层机制复杂,Java平台提供了一些简单的API,可以更简单有效的使用Socket开发而无需了解底层机制
8. 基于TCP协议的Socket编程
基于TCP协议的Socket网络通信
用来实现双向安全连接网络通信
Socket通信模型
进行网络通信时,Socket需要借助数据流来完成数据的传递工作
Socket网络编程一般可以分成如下步骤进行:
服务器端代码:
package com.liqinglin.test; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(5000); Socket socket = serverSocket.accept(); InputStream inputStream = socket.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String info; while((info = bufferedReader.readLine()) != null){ System.out.println(info); } socket.shutdownInput(); OutputStream outputStream = socket.getOutputStream(); String login = "登录成功"; outputStream.write(login.getBytes()); outputStream.close(); bufferedReader.close(); inputStream.close(); socket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } }
客户端代码:
package com.liqinglin.test; import java.io.*; import java.net.Socket; public class Client { public static void main(String[] args) { try { Socket socket = new Socket("localhost", 5000); OutputStream outputStream = socket.getOutputStream(); String info = "这是我要发送给你的一句话"; outputStream.write(info.getBytes()); socket.shutdownOutput(); InputStream inputStream = socket.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String login; while((login = bufferedReader.readLine()) != null){ System.out.println(login); } inputStream.close(); bufferedReader.close(); outputStream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
9. 多线程处理多请求
如何实现多客户请求呢?
10. 基于UDP协议的Socket编程
DatagramPacket类
封装了数据报的数据、数据长度、目标地址和目标端口
DatagramSocket类
接收和发送DatagramPacket对象封装好的数据报
基于UDP协议的Socket网络编程步骤
服务器端代码:
package com.liqinglin.test; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class Server { public static void main(String[] args) { byte[] strs = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(strs, strs.length); DatagramSocket datagramSocket = null; try { datagramSocket = new DatagramSocket(5000); datagramSocket.receive(datagramPacket); String str = new String(datagramPacket.getData(), 0, datagramPacket.getData().length); System.out.println(str); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ datagramSocket.close(); } } }
客户端代码:
package com.liqinglin.test; import java.io.IOException; import java.net.*; public class Client { public static void main(String[] args) { String str = "这是我要发送的一句话"; byte[] strs = str.getBytes(); DatagramSocket datagramSocket = null; try { InetAddress inetAddress = InetAddress.getByName("localhost"); DatagramPacket datagramPacket = new DatagramPacket(strs, strs.length, inetAddress, 5000); datagramSocket = new DatagramSocket(); datagramSocket.send(datagramPacket); } catch (UnknownHostException e) { e.printStackTrace(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { datagramSocket.close(); } } }