java进阶篇

目录

(1)网络协议基础知识

(2)应用无协议socket编程

(3)应用层http协议WebServer编程

(4)应用层WebSocket协议双工编程

(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")
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值