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();
}
}
}