从理论到实践网络编程模型:(BIO、NIO、AIO)同步与异步模型的原理与应用 (五)

Socket(套接字)

是网络编程中的一个重要概念,它是计算机网络中通信的基本操作单元。通过套接字,程序可以在网络上进行数据交流。简单来说,Socket是一个软件结构,完成三次握手它允许应用程序通过网络发送和接收数据,属于划分的五个层次的应用层。(不清楚的可以看专栏前面的文章中有些)

Socket的主要功能

  1. 通信:通过Socket,应用程序可以在不同计算机之间进行数据传输。
  2. 网络协议 :Socket支持多种网络协议,包括TCP(传输控制协议)和UDP(用户数据报协议)
  3. 端口管理 :Socket可以通过端口与网络上的其他应用程序进行区分,确保数据能够正确到达目标应用。这个要自己去定,一台电脑有65536个端口,可以完成65536×65536个连接。前后端分离开发就是通过端口来交流。
  4. 数据流管理 :Socket可以处理流式数据,使得数据的发送和接收更加高效。上一篇有写Java的流处理

Java中的Socket实现

在Java中,Socket编程主要依赖于java.net包中的类。最常用的类有SocketServerSocket。下面是一个简单的示例,展示如何在Java中实现基于Socket的网络通信。

1. TCP Socket编程示例

服务器端

以下是一个简单的TCP服务器的实现:

java 复制代码
import java.io.*;
import java.net.*;

public class SimpleServer {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(7000)) {
            System.out.println("服务器已启动,等待客户端连接...");

            while (true) {
                Socket clientSocket = serverSocket.accept(); // 等待客户端连接
                System.out.println("客户端连接: " + clientSocket.getInetAddress());

                // 创建输入输出流
                BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

                String message;
                while ((message = in.readLine()) != null) {
                    System.out.println("收到消息: " + message);
                    out.println("服务器回复: " + message); // 回应客户端
                }

                // 关闭连接
                in.close();
                out.close();
                clientSocket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
BS架构(Browser/Server Architecture)
1. 定义

BS架构是指基于浏览器的网络架构模型,客户端通过浏览器访问服务器上的应用。服务器负责处理所有的业务逻辑和数据存储。

2. 特点
  • 无客户端安装:用户只需使用浏览器访问服务,无需安装额外的软件。
  • 集中管理:应用程序和数据集中在服务器端,便于管理和维护。
  • 跨平台:由于浏览器的广泛使用,BS架构几乎可以在所有操作系统上运行。
3. 优势
  • 易于部署:只需要更新服务器端,所有用户皆可立即获得最新版本。
  • 成本效益:减少了客户端的维护成本,简化了IT管理。
  • 易于访问:用户可以在任何设备上,只要有浏览器和网络连接即可访问。
4. 劣势
  • 性能限制:浏览器对性能的限制可能会影响用户体验,尤其是在复杂计算和图形处理上。
  • 安全性:面临更多的网络安全风险,因数据在网络中传输。
  • 功能限制:某些高级功能可能不易在浏览器中实现。

客户端

以下是一个简单的TCP客户端的实现:

java 复制代码
import java.io.*;
import java.net.*;

public class SimpleClient {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 7000); // 连接到服务器
             PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
             
            // 发送消息到服务器
            out.println("Hello, Server!");
            String response = in.readLine(); // 接收服务器的响应
            System.out.println("服务器回复: " + response);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码说明

  1. ServerSocket:用于创建一个服务器端的Socket,监听特定的端口(在这里是7000)。
  2. Socket:一旦客户端请求连接,服务器端接受该请求,创建一个Socket对象与客户端进行通信。
  3. 输入输出流
    • 输入流 :服务器通过BufferedReader读取客户端发送的信息。
    • 输出流 :使用PrintWriter向客户端发送响应。
  4. 连接管理:服务器在接收完客户端的消息后,关闭连接。
CS架构(Client/Server Architecture)
1. 定义

CS架构是指一种网络架构模型,其中客户端(Client)和服务器(Server)之间通过网络进行交互。客户端通常是一个桌面应用程序,直接与服务器进行数据交换。

2. 特点
  • 客户端应用程序:客户端需要安装专门的应用程序,通常是桌面软件。
  • 功能强大:由于可以利用客户端设备的资源,CS架构可以实现复杂的业务逻辑和界面。
  • 网络连接:客户端与服务器之间建立持久连接,通常采用TCP/IP协议。
  • 安全性:相对较高,数据和业务逻辑通常在服务器端处理,减少了客户端的安全隐患。
3. 优势
  • 性能:客户端可以进行复杂的计算和处理,减少服务器负担。
  • 用户体验:丰富的用户界面和交互能力。
  • 离线功能:部分客户端应用可以在没有网络连接的情况下运行。
4. 劣势
  • 维护成本:需要在每个客户端上安装和升级软件,维护成本较高。
  • 兼容性:可能存在不同操作系统和硬件配置之间的兼容性问题。
  • 网络依赖:依赖于网络的稳定性和速度。

总结

  • Socket是网络通信的基础,通过Socket可以实现客户端与服务器之间的数据交换。
  • 在Java中,通过SocketServerSocket类可以方便地实现基于TCP的网络通信。
  • 以上示例展示了基本的Socket使用,您可以根据需要扩展功能,例如处理多个客户端连接或添加异常处理逻辑。

下面是关于 BS 架构(Browser/Server,浏览器-服务器架构)和 CS 架构(Client/Server,客户机-服务器架构)的详细比较及解释。

特性 CS架构 BS架构
客户端 需要安装专用应用 无需安装,使用浏览器访问
资源利用 可利用客户端资源 依赖服务器资源
部署和维护 复杂,需逐个更新客户端 简单,集中更新服务器
跨平台兼容性 可能存在兼容性问题 跨平台,依赖浏览器
用户体验 更丰富的界面和交互 受限于浏览器的能力
安全性 较高,但需保护客户端 面临网络安全风险

CS架构适合对性能要求高、需要复杂计算的应用,而BS架构则更适合需要广泛访问、易于维护的应用。

这个只是一个简单的实现,之后会有个更加难的实现方法,运用bio实现聊天功能的。万丈高楼平地起。持续更新中~~

相关推荐
南猿北者8 分钟前
docker Network(网络)
网络·docker·容器
Hacker_Nightrain1 小时前
网络安全CTF比赛规则
网络·安全·web安全
网络安全指导员2 小时前
恶意PDF文档分析记录
网络·安全·web安全·pdf
co0t3 小时前
计算机网络(11)和流量控制补充
服务器·网络·计算机网络
白总Server3 小时前
JVM解说
网络·jvm·物联网·安全·web安全·架构·数据库架构
清尘沐歌3 小时前
有什么好用的 WebSocket 调试工具吗?
网络·websocket·网络协议
Li_0304063 小时前
Java第十四天(实训学习整理资料(十三)Java网络编程)
java·网络·笔记·学习·计算机网络
Tony聊跨境4 小时前
什么是 ISP:了解互联网服务提供商的作用
网络·人工智能·isp
earthzhang20214 小时前
《深入浅出HTTPS》读书笔记(7):安全的密码学Hash算法
网络·网络协议·http·https·1024程序员节
Hacker_Oldv4 小时前
【网络工程】计算机硬件概述
前端·网络·安全·web安全