一、网络编程
1.1 网络编程概述
- 计算机网络:为实现资源共享和信息传递,通过通信线路连接起来若干主机,称为计算机网络
- 网络编程:让计算机与计算机之间建立连接,进行通信
- 网络编程三要素:
* IP:计算机在网络中的唯一标识
* 端口:应用程序在网络中的唯一标识
* 协议:网络间通信的规则(TCP/UDP)
1.2 网络模型
- OSI七层模型:
* 应用层:负责文件访问和管理,可靠运输服务,远程操作服务(HTTP,FTP,SMTP)
* 表示层:负责定义转换数据格式及加密,允许选择以二进制或ASCII格式传输
* 会话层:负责应用建立和维持会话,使通信在失效时继续恢复通信(断点续传)
* 传输层:负责是否选择差错恢复协议,数据流重用,错误顺序重排(TCP,UDP)
* 网络层:负责定义能够标识所有网络节点的逻辑地址(IP地址)
* 数据链路层:通过规程或协议(差错控制)来控制传输数据的正确性(MAC)
* 物理层:为设备之间的数据通信提供传输信号和物理介质(双绞线,光导纤维)
- TCP/IP模型:
* 一组用于实现网络互联的通信协议,将协议分为四个层次
* 应用层:负责传送各种最终形态的数据,是直接与用户打交道的层
* 传输层:负责传送文本数据
* 网络层:负责分配地址和传送二进制数据
* 网络接口层:负责建立电路连接,是整个网络的物理基础
1.3 TCP/UDP
- TCP协议:是一种面向连接的,可靠的,基于字节流的传输层通信协议。数据大小无限制,建立连接需要三次握手,断开连接需要四次挥手
- UDP协议:是一种无连接的,提供面向事务的简单不可靠信息传送服务,每个包的大小是64KB
1.4 InetAddress
- 表示互联网协议(IP)地址对象,封装了与该IP地址相关的所有信息,并提供获取信息的常用方法
- 常用方法:
* getLocalHost();获得本地主机地址对象
* getByName(String host);根据主机名获得地址对象
* getAllByName(String host);获得所有相关地址对象
* getHostAddress();获取IP地址字符串
* getHostName();获得IP地址主机名
1.5 Socket编程
- 开发步骤:
* 建立通信连接(会话):
* 创建ServerSocket,指定端口号
* 调用accpet等待客户端接入
* 客户端请求服务器:
* 创建Socket,指定服务器IP+端口号
* 使用输出流,发送请求数据给服务器
* 使用输入流,接受响应数据到客户端(等待)
* 服务器响应客户端:
* 使用输入流,接收响应数据到服务器(等待)
* 使用输出流,发送响应数据给客户端
public class TcpServer {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(12345);
Socket socket = ss.accept();
System.out.println("服务器连接成功!");
InputStream is = socket.getInputStream();
byte[] b = new byte[1024];
int len = is.read(b);
String str = new String(b, 0, len);
System.out.println(str);
OutputStream os = socket.getOutputStream();
os.write("给客户端的回应...".getBytes());
IOUtils.closeAll(is, os, socket, ss);
}
}
public class TcpClient {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("127.0.0.1", 12345);
System.out.println("客户端连接成功!");
OutputStream os = socket.getOutputStream();
os.write("客户端发来的消息...".getBytes());
InputStream is = socket.getInputStream();
byte[] b = new byte[1024];
int len = is.read(b);
System.out.println(new String(b, 0, len));
IOUtils.closeAll(os, is, socket);
}
}