目录
(1)网络协议基础知识
- 通讯协议
计算机网络中,约定俗称的标准,对速率,传输代码,代码结构,传输控制步骤,出错控制进行控制。
- 通信接口
结点之间进行通信,必须在他们之间建立接口,进行信息交换。硬件规定结点之间的信息传递,软件规定通信协议。
- 网络分层
简化于层次方式,层次之间可以通信,上层调用下层,下层不予上层发生关系。对数据封装和数据拆分。
-- IOS模型
-- TCP/IP模型
- IP地址
标识一个通讯实体(路由器,电脑)的地址。分为IPV4(32位)以点分十进制表示,IPV6(128位)以冒分8个十六进制表示。
- 端口
用于表示计算机的网络应用程序,用16个2进制表示,不同协议的端口的端口可以一样,范围是0-65535。
//查看端口
netstat -ano 所有
taskat -aon|findstr "port" 进程
findstr "port" 程序
//InetSocketAddress implements SocketAddress
InetSocketAddress port = new InetSocketAddress("ip|dns",port);
addr.getHostName();
addr.getAddress();
addr.getPort();
- URI(URL&URN)
URI:统一资源标志符
URN: 统一资源名称
URL: 统一资源定位符
//URL 由协议,主机域名,端口号,资源文件名组成。
new URL(String url);
url.getHost();
url.port();
url.getProtocol() 协议
url.getFile(); 带参数资源
url.getPath(); 不带参数
url.getQuery(); 参数
url.getRef(); 锚点
- 爬虫
从网络查找数据,分析数据,下载数据,分析数据,对数据进行筛选,清洗。
//获取和下载
URL url = new URL(String url);
InputStream in = url.openStream();
BufferedRead bin = new BufferedRead(
new InputStreamRead(in,"UTF-8");
);
String msg;
while( (msg = br.readLine()) != null){
sout(msg);
}
br.close();
//模拟浏ru览器
HttpURLConnecton con = (HttpURLConnecton) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent","");
InputStream in = con.getInputStream();
BufferedRead bin = new BufferedRead(
new InputStreamRead(in,"UTF-8");
);
String msg;
while( (msg = br.readLine()) != null){
sout(msg);
}
br.close();
- 传输协议
-- TCP 面向连接的,可靠的,字节流运输层传输协议(Transport layer)通信协议。应用于上层应用的HTTP,FTP,SMTP。
-- UDP无连接的传输协议,提供面向事务的简单不可靠传送服(UserDatagramProtocal)。应用于视频,监控,dns。
-- Socket应用层利用Socket使用传输层协议进行分离。
(2)应用无协议socket编程
- 基于UDP的Socket编程
//不需要io流进行数据的传输
//将数据单元封装成数据包
- DatagramSocket:用于发送或接受的套接字
- DatagramPacket:封装数据包(字节数组)
发送端:
- 创建
DatagramSocket soc = new DatagramSocket(9088);
- 准备数据
String data = "shuju";
byte[] datas = data.getBytes();
- 封装包数据
DatagramPacket packet = new DatagramPacket(
datas,
0,
datas.length(),
new InetSocketAddress(ip,9525)
);
- 发送数据
soc.send(packet);
- 释放资源
soc.close();
接受端:
//创建
DatagramSocket soc = new DatagramSocket(9525);
//准备容器
byte[] dataContainer = new byte[1024];
DatagramPacket packet = new DatagramParket(
dataContainer,
0,
container;length
);
//阻塞式接受
soc.revice(packet);
//取出数据
byte[] datas = packet.getData();
//释放资源
soc.close();
//文件上传
DaragramSocket soc = new DatagramSockwt(8080);
ObjectOutputStream out = new ObjectOutputStream(
new BufferedOutputStream(
outByte = new ByteArryOutStream()
)
)
//写要用专门的流,传输是字节流
out.writeObjext(序列化对象);
out.flush();
byte[] data = outByte().toByteArray();
DatagramPacket packet = new DatagramPacket(
data,0,data.length,new InetSocketAddress();
);
soc.send(packet);
soc.close();
- 基于TCP的Socket编程
-- 请求响应模式,服务端监听连接。
-- 客户端主动发起通讯
-- 支持单向,双向,多线程
//建立服务端 ServerSocket
-创建
ServerSocket server = new ServerSocket(8080);
-阻塞等待
Socket client = server.accpet();
-已接受连接
DataInputStream in = new ->client.getInputStream();
-服务端接受数据
String data = in.readUTF();
String[] datas = data,split("&");
in.close();
//建立客户端
-创建
Socket client = new Socket(ip,port);
-向服务端发送消息
DataOutputStream out = new ->client.getOutputStream();
String data = "data";
out.writeUTF(data);
out.flush();
-释放
out.close();
client.close();
===文件用文件流+缓冲流
连接建立
请求响应
响应请求
(3)应用层http协议WebServer编程
- http协议 超文本协议,www文件遵循的协议;
请求协议
-请求行:包括请求方式,uri,协议版本信息
-请求头:Request Header
-请求正文:信息载体
响应协议
-状态行:协议版本,状态码,状态描述
-响应头:Response Header
-响应正文:信息载体
private ServerSocket server;
private Socket client;
private final static int port = 2031;
public void start() throw IOException{
server = new ServerSocket(port);
}
public void revive(){
Socket client = server.accpet();
}
public void stop(){
client.close();
}
public void over(){
server.close();
}
String getRequestFile(){
server.start();
server.recive();
InputStream in = client.getInputStream();
byte[] data = new byte[1024];
int len = in.read(data);
String request = new String(data,0,len);
server.stop();
return request;
}
bool setResponseFile(String result){
StringBuilder httpContainer = new StringBuider();
httpContainer.append("<html>")
mvc的原理...
StringBuilder httpHeader = new StringBuider();
httpHeader.append("key:").append(value);
...
BufferWriter out = new ->client.getOutputStream();
out.write();
out.close();
}
(4)应用层WebSocket协议双工编程
- 单播:点对点,两者相互通信。
- 广播:一对多,无针对性
- 多播:组播,针对性广播
//广播系统的应用:公告
加入依赖 wejars
-配置实体消息
OutMessage&InMessage
-配置接口
@MessageMapping("/api/send")
@SendTo("/topic/all/play")
public OutMessage sendInfo(InMessge in){
}
-配置服务器
@Configuration
@EnableWebSocketMessageBroker
extends AbstractWebSocketMessageBrokerConfigure{
//配置发布订阅连接端点
void registerStampEndpoins(...){
register
.addEndpoint("/websocket")
.setAlloweOrigins("*")
.withSockJS();
}
void configureMessageBroker(registry){
super.configureMessageBroker(reidtry);
registry.enableSimpleBroker("/topic","chat")
registry.setApplicationDestinaPrefixes("/app")
}
}