从理论到实践网络编程模型:(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实现聊天功能的。万丈高楼平地起。持续更新中~~

相关推荐
csbDD1 小时前
2025年网络安全(黑客技术)三个月自学手册
linux·网络·python·安全·web安全
荔枝荷包蛋6662 小时前
【Linux】HTTP:Cookie 和 Session 详解
网络·网络协议·http
EasyNVR2 小时前
EasyRTC智能硬件:实时畅联、沉浸互动、消音护航
运维·服务器·网络·安全·音视频·webrtc·p2p
劉煥平CHN2 小时前
RabbitMQ的脑裂(网络分区)问题
网络·分布式·rabbitmq
阿湯哥2 小时前
越权漏洞及其修复方法
网络·安全·web安全
我们的五年3 小时前
【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)
linux·网络·http
ZachOn1y4 小时前
计算机网络:应用层 —— 动态主机配置协议 DHCP
网络·计算机网络·应用层·dhcp·408考研
我们的五年5 小时前
【Linux网络】TCP/IP地址的有机结合(有能力VS100%???),IP地址的介绍
linux·运维·网络·tcp/ip
qq_392794486 小时前
深入解析:短轮询、长轮询、长连接与WebSocket(原理到实现)
网络·websocket·网络协议
苏苏大大7 小时前
【八股】计算机网络
网络·计算机网络