通信服务前沿知识

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

通信的架构: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();
    }
}
相关推荐
一定要AK4 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao4 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
KevinCyao4 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
迷藏4944 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
wuxinyan1235 小时前
Java面试题47:一文深入了解Nginx
java·nginx·面试题
新知图书5 小时前
搭建Spring Boot开发环境
java·spring boot·后端
冰河团队5 小时前
一个拉胯的分库分表方案有多绝望?整个部门都在救火!
java·高并发·分布式数据库·分库分表·高性能
洛_尘5 小时前
Java EE进阶:Linux的基本使用
java·java-ee
宸津-代码粉碎机5 小时前
Spring Boot 4.0虚拟线程实战调优技巧,最大化发挥并发优势
java·人工智能·spring boot·后端·python
MaCa .BaKa5 小时前
47-心里健康咨询平台/心理咨询系统
java·spring boot·mysql·tomcat·maven·intellij-idea·个人开发