​javascript:void(0)​



一、网络基础知识(参考计算机网络)


关于计算机网络部分可以参考相关博客:《TCP/IP协议栈及OSI参考模型详解 ​​http://wangdy.blog.51cto.com/3845563/1588379​


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


InetAddress类用于标识网络上的硬件资源,标识互联网协议(IP)地址。


 


socketTest -> IPtest.java


 


 


三、URL类


1、URL(Uniform Resource Locator)统一资源定位符,表示Internet上某一资源的地址,协议名,资源名称等。


socketTest -> URLtest.java


2、使用URL读取网页内容:通过URL对象的openStream()方法可以得到指定资源的输入流,通过流能够读取或访问网页上的资源


 


socketTest -> URLtest2.java


 



3、Socket通信的步骤


① 创建ServerSocket和Socket


② 打开连接到Socket的输入/输出流


③ 按照协议对Socket进行读/写操作


④ 关闭输入输出流、关闭Socket


 


1、服务器端:


① 创建ServerSocket对象,绑定监听端口


② 通过accept()方法监听客户端请求


③ 连接建立后,通过输入流读取客户端发送的请求信息


④ 通过输出流向客户端发送响应信息


⑤ 关闭相关资源


socketTest ->socketServer.java



2、客户端:


① 创建Socket对象,指明需要连接的服务器的地址和端口号


② 连接建立后,通过输出流向服务器端发送请求信息


③ 通过输入流获取服务器响应的信息


④ 关闭响应资源


 


socketTest ->socketClient.java


 


 


五、UDP编程


UDP协议(用户数据报协议)是无连接的、不可靠的、无序的,速度快


进行数据传输时,首先将要传输的数据定义成数据报(Datagram),大小限制在64k,在数据报中指明数据索要达到的Socket(主机地址和端口号),然后再将数据报发送出去


 


DatagramPacket类:表示数据报包


DatagramSocket类:进行端到端通信的类


1、服务器端实现步骤


① 创建DatagramSocket,指定端口号


② 创建DatagramPacket


③ 接受客户端发送的数据信息


④ 读取数据


socketTest ->sockServerUDP.java


 


2、客户端实现步骤


 


① 定义发送信息


② 创建DatagramPacket,包含将要发送的信息


③ 创建DatagramSocket


④ 发送数据


socketTest ->socketClientUDP.java


 


完整实例