文章目录
- 基本概念
- 网络通信协议分类
- IP地址
- 端口号
- TCP/IP协议
- 握手连接
- 实现方式
- 客户端的实现代码
- 服务端的实现代码
基本概念
通过计算机网络可以使多台计算机实现连接,且连接的计算机进行通信时必须遵守一定的规则,这类规则被称为网络通信协议,它对数据的传输格式、速率、步骤等做了统一规定,这些规定是网络中计算机相互完成数据交换的必要前提。
网络通信协议分类
- UDP:User Datagram Protocol,用户数据报协议;不提供复杂的控制机制,利用IP提供面向无连接的通信服务;效率高,但不安全。
– 1) 包量较少的通信(DNS、SNMP登录)
– 2) 视频、音频等多媒体通信(即时通信)
– 3) 限定于LAN等特定网络中的应用通信
– 4) 广播通信(广播、多播) - TCP:Transmission Control Protocol,传输控制协议;通过三次握手、四次挥手流程 提供可靠的通信传输;安全但效率没有UDP高
– 1) 文件上传下载
– 2) 网页浏览
IP地址
是指互联网协议地址(Internet Protocol Address);用来给一个网络中的计算机设备做唯一的网络编号。
- IPv4:是一个32位的二进制数,通常被分为4个字节,表示成a.b.c.d的形式,其中a.b.c.d都是0-255之间的十进制数,比如192.168.0.1;最多可以表示42亿个地址。
- IPv6:采用128位地址长工,每16个字节一组,分成8组16进制数,比如ABCD:12F0:EC98:1234:67BA:009A:EFEF:ABAB,IPv6的出现,解决了IPv4网络地址资源紧张的问题。
- 特殊的IP地址:127.0.0.1
端口号
在计算机与计算通通信过程中,必须保证数据能准确无误的发送到对方的计算机上,除了计算机自身的IP地址外,还需要引入端口号做为通信的必要标识。例如 192.168.0.1:8080
- 端口号是由两个字节组成的,取值范围在0-65535之间;且0-1024之间的端口号已经被操作系统分配,不能随意使用。
- 常用的端品号
– 80: http端口
– 3306:mysql端口
–8080: tomcat端口
TCP/IP协议
TCP通信程序
握手连接
客户端和服务器端必须经过3次握手,建立逻辑连接,才能通信。
实现方式
客户端向服务器端发送连接请求后,就被动地等待服务器的响应。典型的 TCP 客户端要经过下面三步操作:
- 创建一个 Socket 实例:构造函数向指定的远程主机和端口建立一个 TCP 连接;
- 通过套接字的 I/O 流与服务端通信;
- 使用 Socket 类的 close 方法关闭连接。
服务端的工作是建立一个通信终端,并被动地等待客户端的连接。典型的 TCP 服务端执行如下两步操作:
- 创建一个 ServerSocket 实例并指定本地端口,用来监听客户端在该端口发送的 TCP 连接请求;
- 重复执行:
– 调用 ServerSocket 的 accept()方法以获取客户端连接,并通过其返回值创建一个 Socket 实例;
– 为返回的 Socket 实例开启新的线程,并使用返回的 Socket 实例的 I/O 流与客户端通信; 通信完成后,使用 Socket 类的 close()方法关闭该客户端的套接字连接。
客户端的实现代码
- 使用java.net.Socket类创建一个客户端对象,构造方法中指定服务器的IP地址和端口号;
- 使用Socket对象的方法getOutputStream()获取网络字节输出流;
- 使用网络字节输出流的方法write,向服务器端发送数据;
- 使用Socket对象的方法getInputStrem()获取网络字节输入流;
- 使用网络字节输入流的方法read,读取服务器传回的数据;
- 释放资源
服务端的实现代码
- 使用java.net.ServerSocket类创建一个服务端对象,构造方法中指定端口号;
- 使用ServerSocket对象的方法accept(),获取到请求的客户端的Socket对象;
- 开启新的线程处理客户端Socket对象
– 使用Socket对象的方法getInputStrem()获取网络字节输入流;
– 使用网络字节输入流的方法read,读取客户端发送的数据;
– 使用Socket对象的方法getOutputStream()获取网络字节输出流;
– 使用网络字节输出流的方法write,向客户端回写数据; - 释放资源