通信服务前沿知识

网络编程:编写程序,让不同的计算机之间能通过网络之间实现数据交换和通信。

通信的架构:c/s架构(客户端/服务器)高度中心化 服务器是核心 24h运行 客户端可以是app

b/s架构(浏览器/服务器)高度中心化 相当于客户端都变成了浏览器 eg 淘宝网页版

p2p架构(点对点)去中心化 每台电脑既是客户端也是服务器

三个核心要素:1.ip地址 2.端口号 3.协议

ip地址:能确定网络上某台计算机的唯一地址

端口号:端口决定数据传给谁 端口号的取值范围 0 - 65535 知名端口 0 - 1023

协议:通信的规则 tcp和udp协议 tcp可以实现可靠传输 udp则是实现快速传输

网络编程主要靠 Socket (套接字)实现

osi七层网络结构:

1.物理层 实现物理信号(0和1的电信号、光信号的传输)

2.数据链路层 局域网传输 通过mac地址在相邻节点传帧

3.网络层 寻址和路由 决定数据走哪条路能走到对方的ip

4.传输层 实现端到端传输 确保数据完整到达 利用 tcp协议和udp协议

5.会话层 管理连接 负责建立、维持、断开通信会话

6.表示层 翻译数据 负责加密、解密、格式转换

7.应用层 产生数据 即你用的软件界面 往往利用 http ftp smtp协议

在五层结构中 前四层与七层相同 只有最后的一层把七层的后三层合并成为一个应用层

I/O模型:解决的是程序如何与操作系统合作来收发数据的问题

1.阻塞I/O(BIO) 特点:程序发起读取请求后,会被一直阻塞,直到数据完全准备好再返回。一个线程只能处理一个连接。

2.非阻塞I/O(NIO) 特点:程序发起一个请求,如果数据没好,系统会立刻返回一个EAGAIN,程序会不断轮询查看数据好了没。线程不会阻塞住但是频繁询问会消耗cpu

3.I/O多路复用 特点:一个线程可以同时监视成千上万个连接 是现代高并发网络服务器的核心基石。

4.信号驱动I/O 特点:利用信号机制,在内核数据准备好时通知程序。

5.异步I/O(AIO) 特点:程序发出请求后完全不管,操作系统负责等数据和拷贝数据,完成后再通知程序

初步实现BIO 网络编程 代码如下:

复制代码
public class MServer {

    public void startServer() throws IOException {
        ServerSocket server = new ServerSocket(9999);
        System.out.println("服务器已经启动,等待连接中...");

        Socket socket = server.accept();

        // 使用 OutputStreamWriter 包装,并指定 "GBK"
        OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream(), "GBK");
        PrintWriter out = new PrintWriter(osw, true);

        out.println("登录成功");
        System.out.println("已向客户端发送:登录成功");

        // 注意:如果你在 Telnet 里输入中文发给服务器,这里也需要改成 "GBK"
        //InputStreamReader:它是一个“翻译官”,负责把二进制的字节按照指定的编码(如 UTF-8)组合并翻译成字符。
        //BufferedReader:它在翻译官的基础上加了一个“桶”(缓冲区)。它不会立刻把读到的字符给你,而是先把它们存起来。
        InputStreamReader isr = new InputStreamReader(socket.getInputStream(), "GBK");
        BufferedReader in = new BufferedReader(isr);

        System.out.println("等待客户端发送消息...");
        String line;
        while((line = in.readLine()) != null){
            System.out.println("Client 发来: " + line);
        }
    }

    public static void main(String[] args) throws IOException {
        new MServer().startServer();
    }
}
相关推荐
晓13132 小时前
第二章:Redis常见命令与Java客户端
java·数据库·redis
invicinble2 小时前
对于springboot
java·spring boot·后端
莫问前路漫漫2 小时前
JRE 核心实操指南:安装、配置、调优与问题排查
java·eclipse·tomcat·jre
填满你的记忆2 小时前
【从零开始——Redis 进化日志|Day7】双写一致性难题:数据库与缓存如何不再“打架”?(附 Canal/读写锁实战)
java·数据库·redis·缓存·面试
灵感菇_2 小时前
Android OkHttp框架全解析
android·java·okhttp·网络编程
Coder_Boy_2 小时前
基于SpringAI的在线考试系统-知识点管理模块完整优化方案
java·前端·人工智能·spring boot
莫问前路漫漫3 小时前
Java Runtime Environment(JRE)全解析:Java 程序跨平台运行的核心基石
java·开发语言
进阶小白猿3 小时前
Java技术八股学习Day22
java·开发语言·学习
蒟蒻的贤3 小时前
操作系统复习
java·开发语言·数据库