一、基础知识
1.两台计算机间进行通讯需要以下三个条件:
IP地址、协议、端口号
2.TCP/IP协议:
是目前世界上应用最为广泛的协议,
是以TCP和IP为基础的不同层次上多个协议的集合,也成TCP/IP协议族、或TCP/IP协议栈
TCP:Transmission Control Protocol 传输控制协议
IP:Internet Protocol 互联网协议
3.TCP/IP五层模型
应用层:HTTP、FTP、SMTP、Telnet等
传输层:TCP
网络层:IP
数据链路层:
物理层:网线、双绞线、网卡等
4.IP地址
为实现网络中不同计算机之间的通信,每台计算机都必须有一个唯一的标识—IP地址。
32位二进制
5.端口
区分一台主机的多个不同应用程序,端口号范围为0-65535,其中0-1023位为系统保留。
如:HTTP:80 FTP:21 Telnet:23
IP地址+端口号 = Socket
Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础
6.Socket套接字:
网络上具有唯一标识的IP地址和端口组合在一起才能构成唯一能识别的标识符套接字。
Socket原理机制:
通信的两端都有Socket
网络通信其实就是Socket间的通信
数据在两个Socket间通过IO传输
7.Java中的网络支持
针对网络通信的不同层次,Java提供了不同的API,其提供的网络功能有四大类:
InetAddress: 用于标识网络上的硬件资源,主要是IP地址
URL: 统一资源定位符,通过URL可以直接读取或写入网络上的数据
Sockets: 使用TCP协议实现的网络通信Socket相关的类
Datagram: 使用UDP协议,将数据保存在用户数据报中,通过网络进行通信。
InetAddress:标识网络上的硬件资源,主要是IP地址
URL类
表示Internet上某一资源的地址,协议名:资源名称
使用URL读取网页内容
通过URL对象的openStream()方法可以得到指定资源的输入流,通过流能够读取或访问网页上的资源
字节/字符流
- InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象,
- Reader和 Writer.两个是为字符流(一个字符占两个字节)设计的,主要用来处理字符或字符串.
字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,
字节流处理单元为1个字节,操作字节和字节数组。
所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,
所以它对多国语言支持性比较好!
如果是音频文件、图片、歌曲,就用字节流好点,
如果是关系到中文(文本)的,用字符流好点
所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。
在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列
1,字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;
2,字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以
二、TCP编程
套接字:
TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)或插口。
套接字用(IP地址:端口号)表示。
它是网络通信过程中端点的抽象表示,
包含进行网络通信必需的五种信息:
连接使用的协议,
本地主机的IP地址,
本地进程的协议端口,
远地主机的IP地址,
远地进程的协议端口。
1、TCP协议是面向连接的、可靠的、有序的、以字节流的方式发送数据,
通过三次握手方式建立连接,形成传输数据的通道,在连接中进行大量数据的传输,效率会稍低
2、Java中基于TCP协议实现网络通信的类
客户端的Socket类
服务器端的ServerSocket类
3、Socket通信的步骤
① 创建ServerSocket和Socket
② 打开连接到Socket的输入/输出流
③ 按照协议对Socket进行读/写操作
④ 关闭输入输出流、关闭Socket
4、服务器端:
① 创建ServerSocket对象,绑定监听端口
② 通过accept()方法监听客户端请求
③ 连接建立后,通过**输入流读取**客户端发送的请求信息
④ 通过**输出流向客户端发送**乡音信息
⑤ 关闭相关资源
5、客户端:
① 创建Socket对象,指明需要连接的服务器的地址和端口号
② 连接建立后,通过输出流想服务器端发送请求信息
③ 通过输入流获取服务器响应的信息
④ 关闭响应资源