TCP/UDP协议(网络传输过程中,数据的传递两种最常见的形式)
TCP传输控制协议:是一种面向连接的、可靠的、基于字节流的传输层通信协议
需要首先在网络两端建立安全连接,再进行数据传递,确保网络双方完整无误地传输数据
UDP用户数据报协议:是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务
无需建立网络双方连接,直接发送数据包(包含目的地址信息),可能会因为网络问题导致数据传输失败等问题,但是传输速度很快,常用于局域网中传输数据
网络编程:网络编程是基于“请求-响应”模式的
客户端/服务器端模式(C/S模式):对于不同的服务器端程序建立不同的客户端程序
需要同时开发客户端应用程序和服务器端应用程序
客户端应用程序开发步骤:
客户端建立与服务器端的连接(通过IP地址和端口确定服务器端程序)
客户端封装请求数据,发送给服务器端;客户端获得服务器端响应数据,解析并处理数据
客户端关闭网络连接
服务器端应用程序开发步骤:
服务器端监听特定端口
服务器端接收客户端连接
服务器端接收客户端请求数据,解析并处理请求数据;服务器端封装响应数据,发送给客户端端
服务器端关闭网络连接3
浏览器/服务器端模式(B/S模式):对于不同的服务器端程序使用统一的“客户端”
只需要开发服务器端应用程序即可
通过互联网对其进行访问的应用系统,即基于B/S架构的应用系统(网站就是Web应用的典型示例)
Java网络编程核心类
java.net.*:网络类包,涵盖常用网络操作类
java.io.*:数据消息传输包,在网络双方进行数据传递需要使用该包中的类
URL类:统一资源定位符,指向互联网“资源”的指针
URL(String url); // 通过给定字符串建立URL对象
InputStream openStream(); //打开当前URL连接的输入流
URLConnection openConnection(); // 建立URL网络连接
URLConnection类:应用程序和 URL 之间的通信链接,用于读取和写入此 URL 引用的资源
通过URL对象的openConnection()方法创建
使用构造方法:URLConnection( URL url)
获得响应消息头类方法:getContentType()、getContentLength()、getContentEncoding()、……
获得响应消息主体:getContent()
获得当前连接输入/输出流对象:getInputStream()、getOutputStream()
HttpURLConnection类:特定支持HTTP协议的URLConnection
通过URL对象的openConnection()方法创建,强制转换为目标对象
使用构造方法:HttpURLConnection( URL url)
从URLConnection类继承的方法
针对HTTP请求响应消息的特定方法:getRequestMethod()、setRequestMethod()
getResponseCode()、getResponseMessage()、……
URL网络编程实例:文件下载
URL网络编程实例:获取响应信息
Socket类:客户端套接字类。实现客户端向服务器发送数据、接收服务器数据等功能;实现服务器端向客户端发送数据、接收客户端数据等功能
构造方法:Socket(InetAddress address, int port);
Socket(String host, int port);
getInputStream(); // 获得网络输入流
getOutputStream(); // 获得网络输出流
close(); // 关闭Socket连接
ServerSocket类:服务器端套接字类。监听服务器指定端口,接收客户端连接请求
构造方法:ServerSocket(int port)
accept(); // 用于产生“阻塞”,直到接收一个连接,返回close(); // 关闭服务器端Socket监听
单服务器端接收多次通讯
单服务器端多线程接收多次通讯
UDP网络编程
建立网络连接时,有两种传输层协议(TCP传输协议和UDP传输协议)
DatagramSocket类:客户端/服务器端网络Socket端口对象
DatagramSocket(); // 创建一个空的Socket对象
DatagramSocket(int port); // 创建指定监听端口的Socket对象
void send(DatagramPacket p); // 发送数据报文
void receive(DatagramPacket p); // 接收数据报文
DatagramPacket类:数据报文对象
DatagramPacket(byte[] buf, int len); // 用空数组创建对象,用来接收数据
DatagramPacket(byte[] buf, int offset, int len); // 接收数据的特定部分
DatagramPacket(byte[] buf, int len, InetAddress addr, int port); // 包含数据的数组创建对象,用来发送数据,同时指明数据目的地和目标端口号 // 发送数据的指定部分