网络初始b
Posted 鸟随二月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络初始b相关的知识,希望对你有一定的参考价值。
osi七层模型
从上往下:
应用层:针对特定应用的协议。(我们的程序就在这一层,著名的HTTP,SSH)。
表示层:将网络信息包转换成程序需要的数据结构。
会话层:通信管理。负责建立和断开通信连接。
传输层:管理两个节点’之间的数据传输。负责可靠传输)相当于通信中填写收件人信息和发件人信息。其中:网络交互必各的5个部分:1.目标地址IP 2.目标地址的端口 3.源地址IP 4.源端口号 5.协议)。
网络层:地址管理与路由选择(相当于通信方式(飞机或火车))。
数据链路层:互连设备之间传送和识别数据帧(相当于具体路线)。
物理层:以“o”,“1”代表电压的高低、灯光的闪灭。界定连接器和网线的规格。(光电信号)。
应用层知名协议:HTTP、SSH、FTP
传输层知名协议:TCP/UDP
网络知名协议:IP
TCP/IP 4层协议:
应用层:程序层。
传输层:确认源地址和目标地址的。
网络层:用确定传输方式的。
数据链路层:确定相邻节点直接的数据传输。
也可加上物理层
封装和分用
UDP和TCP
UDP:无连接、不稳定、面向数据报。
TCP:有连接、稳定、面向数据流。
利用UDP发送数据包Java编程
server
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* UDP 服务器
*/
public class UDPServer {
// 端口号
private static final int port = 9001;
// 接收数据容器的大小
private static final int bleng = 1024;
public static void main(String[] args) throws IOException {
// 1.创建一个 UDP 服务器
DatagramSocket socket = new DatagramSocket(port);
while (true) {
DatagramPacket clientPacket = new DatagramPacket(
new byte[bleng], bleng);
// 2.等待客户端连接
socket.receive(clientPacket);
// 执行此代码表示已经有客户端连接
// 3.拿到客户端的请求信息
String msg = new String(clientPacket.getData());
System.out.println("接收到客户端的消息:" + msg);
// 给客户端反馈一个消息
String serMsg = msg.replace("吗?", ".").
replace("你", "我");
// 构建客户端发送数据包
DatagramPacket serPacket = new DatagramPacket(
serMsg.getBytes(),
serMsg.getBytes().length, // 注意是字节数组的长度
clientPacket.getAddress(),
clientPacket.getPort()
);
// 给客户端发送消息
socket.send(serPacket);
}
}
}
PC
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
/**
* UDP 客户端
*/
public class UDPClient {
// 服务器端 IP
private static final String ip = "127.0.0.1";
// 服务器端端口号
private static final int port = 9001;
// 数据包大小
private static final int bleng = 1024;
public static void main(String[] args) throws IOException {
// 1.创建客户端
DatagramSocket socket = new DatagramSocket();
// 让用户来输入发送的消息
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("->");
// 接收到用户输入的信息
String msg = scanner.nextLine();
// 2.构建发送数据包
DatagramPacket datagramPacket = new DatagramPacket(
msg.getBytes(),
msg.getBytes().length,
InetAddress.getByName(ip),
port
);
// 3.发送消息
socket.send(datagramPacket);
// 接收服务器端的消息
DatagramPacket serPacket = new DatagramPacket(
new byte[bleng], bleng
);
socket.receive(serPacket);
System.out.println(new String(serPacket.getData()));
}
}
}
在ideal中打包发布
java -jar jar’s name
利用Tcp发送数据流Java编程
server
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* TCP
*/
public class TCPServer {
// 端口号
private static final int port = 9002;
public static void main(String[] args) throws IOException {
// 1.创建 TCP 服务器端
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("服务器启动成功!");
// 2.登录客户端的连接
Socket client = serverSocket.accept();
System.out.println(String.format("有客户端连接了,客户端IP:%s,端口:%d",
client.getInetAddress().getHostAddress(), client.getPort()));
// try-resouce
try (BufferedWriter bufferedWriter = new BufferedWriter(
new OutputStreamWriter(client.getOutputStream()));
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(client.getInputStream()))
) {
while (true) {
// 3.接收客户端的消息
String msg = bufferedReader.readLine();
if (msg != null && !msg.equals("")) {
System.out.println("收到客户端信息:" + msg);
// 4.返回给客户端响应信息
String serMsg = "我收到了";
bufferedWriter.write(serMsg + "\\n");
// 刷新缓冲区
bufferedWriter.flush();
}
}
}
}
}
client
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
/**
* TCP 客户端
*/
public class TCPClient {
// 服务器端 IP
private static final String ip = "127.0.0.1";
// 服务器端口号
private static final int port = 9003;
public static void main(String[] args) throws IOException {
// 1.创建 tcp 客户端,并且连接到服务器端
Socket socket = new Socket(ip, port);
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream()));
Scanner scanner = new Scanner(System.in);
) {
while (true) {
System.out.print("英文:");
String msg = scanner.nextLine();
// 2.发送消息给服务器端
writer.write(msg + "\\n");
writer.flush();
// 3.接收服务器响应的内容
String serMsg = reader.readLine();
System.out.println("中文:" + serMsg);
}
}
}
}
实现简易版HTTP
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 简易版 HTTP
*/
public class CustomHTTP {
// 端口号
private static final int port = 9004;
public static void main(String[] args) throws IOException {
// 1.创建一个 tcp 服务器
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("服务器已启动");
// 2.等待客户端的连接
Socket socket = serverSocket.accept();
// 3.得到两个读写对象
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream()))
) {
// 读取首行信息【方法类型 URL HTTP版本号】
String firstLine = reader.readLine();
if (firstLine != null && !firstLine.equals("")) {
String[] fLine = firstLine.split(" ");
// 读取到请求方法的类型
String method = fLine[0];
// 读取到 URL
String url = fLine[1];
// 读取 HTTP 版本号
String httpVer = fLine[2];
System.out.println(String.format("读取到客户端请求,方法类型:%s,URL:%s,版本:%s",
method, url, httpVer));
// 4.业务逻辑处理
String content = "<h1>未知</h1>";
if (url.contains("404")) {
content = "<h1>没有找到此页面</h1>";
} else if (url.contains("200")) {
content = "<h1>你好,世界!</h1>";
}
// 5.将结果打印到浏览器上
// 写入首行信息
writer.write(httpVer + " 200 ok\\n");
// 写入 Head(Content-Type/Content-Length)
writer.write("Content-Type: text/html;charset=utf-8\\n");
writer.write("Content-Length: " + content.getBytes().length + "\\n");
// 写入空行
writer.write("\\n");
// 写入 body
writer.write(content);
writer.flush();
}
}
}
}
以上是关于网络初始b的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装
VSCode自定义代码片段14——Vue的axios网络请求封装
VSCode自定义代码片段14——Vue的axios网络请求封装