Oracle 的网络配置文件详解

Oracle 的网络配置文件详解

目录

  • Oracle 的网络配置文件详解
    • 一、Oracle 的网络配置文件概述
        • 1、`listener.ora` 的内容
        • 2、`sqlnet.ora`的内容
        • 3、`tnsnames.ora` 的内容
    • 二、配置 listener.ora 文件
        • 1、注册
        • 2、动态注册
        • (1)动态注册默认端口
        • (2)动态注册非默认端口
        • 3、静态注册
    • 三、配置 tnsnames.ora 文件
        • 1、tnsnames.ora 文件的内容
        • 2、tnsnames 连接过程
    • 四、配置 sqlnet.ora 文件

一、Oracle 的网络配置文件概述

为了使外部进程能够访问 Oracle 数据库,必须配置 Oracle 网络环境。Oracle 网络环境是通过配置listener.orasqlnet.oratnsnames.ora 三个文件来实现的。

由于 Oracle 数据库是一个客户端服务器的软件,首先需要接收来自客户端的连接请求,服务器就必须配置监听器;其次,客户端要连接到某个制定的服务器,就必须配置到服务器的 tns 服务名。

其中 listener.ora 和服务器端相关,而 tnsnames.orasqlnet.ora 和客户端相关。只有远程连接数据库才需要用到这三个文件,其中,listener.ora 一般配置在服务端,sqlnet.oratnsnames.ora 一般配置在客户端。

以上三个文件保存在 $ORACLE_HOME/network/admin目录下。

[oracle@ora admin]$ cd $ORACLE_HOME/network/admin
[oracle@ora admin]$ ll
总用量 16
-rw-r--r-- 1 oracle oinstall 676 1231 18:47 listener.ora
drwxr-xr-x 2 oracle oinstall  64 1230 21:15 samples
-rw-r--r-- 1 oracle oinstall 381 1217 2012 shrept.lst
-rw-r--r-- 1 oracle oinstall 223 1230 21:28 sqlnet.ora
-rw-r----- 1 oracle oinstall 500 1231 18:51 tnsnames.ora

当我们安装好 Oracle数据库之后,会自动生成这三个文件。其中含有 listener.ora 文件是因为安装数据库的这台机器作为服务端,用来监听客户端发送过来的数据库连接;而含有 sqlnet.oratnsnames.ora 文件,是因为安装数据库的这台机器同时也可以作为客户端,用来配置连接其他远程数据库。

1、listener.ora 的内容
[oracle@oradg admin]$ cat listener.ora 
# listener.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = oradg)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /usr/local/oracle
2、sqlnet.ora的内容
[oracle@oradg admin]$ cat sqlnet.ora 
# sqlnet.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

ADR_BASE = /usr/local/oracle
3、tnsnames.ora 的内容
[oracle@ora admin]$ cat tnsnames.ora 
# tnsnames.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

HISDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = hisdb)
    )
  )

二、配置 listener.ora 文件

listener进程接受远程对数据库的接入申请并转交给 Oracle 的服务器进程。所以如果不是使用远程连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。

1、注册

注册就是将数据库作为一个服务注册到监听程序!

客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样,也可能不一样。

在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务。无论何时启动一个数据库,都有两条信息注册到监听器中:数据库服务器对应的实例和服务。如下所示:

[oracle@ora admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-JAN-2025 10:51:29

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                31-DEC-2024 18:51:55
Uptime                    0 days 15 hr. 59 min. 33 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /usr/local/oracle/diag/tnslsnr/ora/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora)(PORT=1521)))
Services Summary...
Service "hisdb" has 1 instance(s).                                    # 服务名
  Instance "ora", status READY, has 1 handler(s) for this service...  # 实例名
Service "hisdbdg" has 1 instance(s).
  Instance "oradg", status UNKNOWN, has 1 handler(s) for this service...
Service "oraXDB" has 1 instance(s).
  Instance "ora", status READY, has 1 handler(s) for this service...
The command completed successfully

对应的服务名和实例名如下:

SQL> show parameter name

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
cell_offloadgroup_name		     string
db_file_name_convert		     string
db_name 			     string	 hisdb
db_unique_name			     string	 hisdb
global_names			     boolean	 FALSE
instance_name			     string	 ora    -- 实例名
lock_name_space 		     string
log_file_name_convert		     string
processor_group_name		     string
service_names			     string	 hisdb  --- 服务名

在数据库服务器和客户端之间有一监听程序(Listener ),在监听程序中,会记录相应数据库对应的服务名(一个数据库可能对应有多个服务名),当客户端需要连接数据库时,只需要提供服务名,就可以建立客户端和服务器之间的连接。

2、动态注册

动态注册是监听先启动,然后如果实例启动,则注册到监听当中,提供服务。

动态注册是在实例启动的时候PMON进程根据spfilepfileinit.ora)中的instance_nameservice_names两个参数将实例和服务动态注册到listener中。

首先要在init.ora中指定instance_nameservice_names两个参数的值。注册到监听器中的实例值从init.ora文件中的instance_name参数取得。如果该参数没有设定值,那么它将取init.ora文件中的db_name的值。如果在RAC中配置,必须将集群中每个实例的instance_name参数设置为一个唯一的值。

注册到监听器中的服务值从init.ora文件中的参数service_names取得。如果该参数没有设定值,数据库将拼接init.ora文件中的db_namedb_domain的值来注册自己。如果选择提供service_names值,可以使用完全限定的名称(如:orcl.oracle.com)或缩写的名称(如:orcl)。如果选择缩写的名称并设置了db_domain参数,注册到监听器中的服务将是service_name值和db_domain值的拼接。

例如:下面的设置将导致服务orcl.oracle.com被注册到监听器中:

db_domain=oracle.com
service_names=orcl

采取动态注册方法时,文件listener.ora中的内容如下:

SID_LIST_LISTENER =
 (SID_LIST =
   (SID_DESC =
     (GLOBAL_DBNAME = hisdb)
     (ORACLE_HOME = /usr/local/oracle/product/11.2.0/db_1)
     (SID_NAME = ora)
    )
  )

可以在service_names参数中指定多个服务值,值之间用逗号格开,这对于共享服务器配置是很有用的。动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP),因为pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,如果需要向非默认监听注册,则需要配置local_listener参数。

(1)动态注册默认端口

说明:动态注册默认端口时监听的名字必须叫LISTENER 、端口号必须是1521

动态注册默认端口时,文件 listener.ora的内容如下:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.59.129)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /usr/local/oracle
(2)动态注册非默认端口

说明:

■ 动态注册非默认端口时,监听的名字必须叫LISTENER

■ 端口使用其它未占用端口(如:1530)

■ 配置一个tns,假设名字为HISDB,使用1530 端口

■ 执行如下命令,配置数据库的local_listener参数为:HISDB

alter system set local_listener = HISDB ;

动态注册非默认端口的步骤如下:

步骤一:修改listener.ora 文件

[oracle@ora admin]$ vi listener.ora 

# listener.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1530))
    )
  )


ADR_BASE_LISTENER = /usr/local/oracle

步骤二:修改tnsnames.ora 文件

ORA_LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1530))
    (CONNECT_DATA =
      (SERVICE_NAME = hisdb)
    )
  )

步骤三:修改参数

alter system set local_listener = HISTDB;

步骤四:重启监听,查看监听状态

[oracle@ora admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-JAN-2025 12:01:11

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                01-JAN-2025 12:00:00
Uptime                    0 days 0 hr. 1 min. 10 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /usr/local/oracle/diag/tnslsnr/ora/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora)(PORT=1530)))
Services Summary...
Service "hisdb" has 1 instance(s).
  Instance "ora", status READY, has 1 handler(s) for this service...
Service "oraXDB" has 1 instance(s).
  Instance "ora", status READY, has 1 handler(s) for this service...
The command completed successfully
3、静态注册

静态注册监听一启动,不管实例是否启动,实例的名字已经注册到监听中,主要用于dba远程启动数据库实例。

静态注册设置方法:设置GLOBAL_DBNAMESID_NAME参数。

注意:静态注册的监听status永远为UNKNOWN

例如:

[oracle@ora admin]$ vi listener.ora 

# listener.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
# ===========以下为动态注册的监听============================================================
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1521))
    )
  )
# ===========以下为静态注册的监听============================================================
SID_LIST_LISTENER =
 (SID_LIST =
   (SID_DESC =
     (GLOBAL_DBNAME = hisdb)
     (ORACLE_HOME = /usr/local/oracle/product/11.2.0/db_1)
     (SID_NAME = ora)
    )
    (SID_DESC =
     (GLOBAL_DBNAME = hisdbdg)
     (ORACLE_HOME = /usr/local/oracle/product/11.2.0/db_1)
     (SID_NAME = oradg)
    )
  )


ADR_BASE_LISTENER = /usr/local/oracle

重启监听,查看监听状态:

[oracle@ora admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-JAN-2025 12:25:31

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                01-JAN-2025 12:24:12
Uptime                    0 days 0 hr. 1 min. 18 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /usr/local/oracle/diag/tnslsnr/ora/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora)(PORT=1521)))
Services Summary...
Service "hisdb" has 2 instance(s).
  Instance "ora", status UNKNOWN, has 1 handler(s) for this service...
  Instance "ora", status READY, has 1 handler(s) for this service...
Service "hisdbdg" has 1 instance(s).
  Instance "oradg", status UNKNOWN, has 1 handler(s) for this service...
Service "oraXDB" has 1 instance(s).
  Instance "ora", status READY, has 1 handler(s) for this service...
The command completed successfully

说明:

实例状态为UNKNOWN值时表明此服务是静态注册的设置。这时监听器不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在。

动态注册的数据库通过状态信息中的状态READY或状态BLOCKED来指明。不管何时关闭数据库,动态注册的数据库都会动态地从监听器注销,而与之相关的信息将从状态列表中消失。不管数据库是在运行还是已经关闭,监听器总是知道它的状态。

三、配置 tnsnames.ora 文件

1、tnsnames.ora 文件的内容

该文件类似于 Linuxhosts 文件,提供 tnsname到主机名或者ip的对应。文件的内容如下:

[oracle@ora admin]$ vi tnsnames.ora

# tnsnames.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.


HISDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = hisdb)
    )
  )

说明:

(1)PROTOCOL:客户端与服务器端通讯的协议,一般为TCP ,该内容一般不用改。

(2)HOST:数据库监听所在机器的主机名或IP地址,数据库侦听一般与数据库在同一个机器上。

(3)PORT:数据库监听的端口。

(4)SERVICE_NAME:服务名。

2、tnsnames 连接过程

当输入sqlplus sys/oracle@hisdb 时:

(1)查询sqlnet.ora,查看名称的解析方式,发现是 TNSNAME

(2)查询tnsnames.ora文件,找到 HISDB 的记录,并且找到主机名,端口和 service_name

(3)如果listener进程没有问题的话,建立与listener 进程的连接。

(4)根据不同的服务器模式(如:专用服务器模式或者共享服务器模式,默认为专用服务器模式),listener采取接下去的动作。

四、配置 sqlnet.ora 文件

Oracle 通过该文件决定怎么样找一个连接中出现的连接字符串。 sqlnet.ora 文件的默认内容如下:

[oracle@ora admin]$ cat sqlnet.ora 
# sqlnet.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

ADR_BASE = /usr/local/oracle

此时,如果在客户端输入如下内容:

[oracle@ora admin]$ sqlplus sys/oracle@hisdb as sysdba

则客户端会首先在tnsnames.ora文件中找hisdb的记录,如果没有相应的记录则尝试把 hisdb当作一个主机名。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/948029.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ-基本使用

RabbitMQ: One broker to queue them all | RabbitMQ 官方 安装到Docker中 docker run \-e RABBITMQ_DEFAULT_USERrabbit \-e RABBITMQ_DEFAULT_PASSrabbit \-v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5672:5672 \--network mynet\-d \rabbitmq:3…

Android Camera压力测试工具

背景描述: 随着系统的复杂化和业务的积累,日常的功能性测试已不足以满足我们对Android Camera相机系统的测试需求。为了确保Android Camera系统在高负载和多任务情况下的稳定性和性能优化,需要对Android Camera应用进行全面的压测。 对于压…

vscode中调用deepseek实现AI辅助编程

来自 Python大数据分析 费弗里 1 简介 大家好我是费老师,最近国产大模型Deepseek v3新版本凭借其优秀的模型推理能力,讨论度非常之高🔥,且其官网提供的相关大模型API接口服务价格一直走的“价格屠夫”路线,性价比很高…

基于 LMS 算法的离散傅里叶分析器

基于 LMS(Least Mean Squares,最小均方)算法的离散傅里叶分析器是一种结合自适应滤波和频域分析的工具,用于动态估计信号的频谱成分。它将 LMS 自适应算法与离散傅里叶变换(DFT)的频率分解能力结合&#xf…

2022浙江大学信号与系统笔记

原视频地址:2022浙江大学信号与系统(含配套课件和代码) - 胡浩基老师-哔哩哔哩 ⭐⭐⭐ 我的笔记:飞书链接 - 信号与系统 基于视频,记得笔记,加了点自己的补充(有的是问 ChatGPT 的)…

K8s高可用集群之Kubernetes集群管理平台、命令补全工具、资源监控工具部署、常用命令

K8s高可用集群之Kubernetes管理平台、补全命令工具、资源监控工具部署 1.Kuboard可视化管理平台2.kubectl命令tab补全工具3.MetricsServer资源监控工具4.Kubernetes常用命令 1.Kuboard可视化管理平台 可以选择安装k8s官网的管理平台;我这里是安装的其他开源平台Kub…

Gitlab-runner 修改默认的builds_dir并使用custom_build_dir配置

gitlab-runner 修改默认的builds_dir并使用custom_build_dir配置 1. 说明2. 实操(以docker执行器为例)2.1 修改默认的builds_dir2.1.1 调整gitlab-runner的配置文件2.1.2 CI文件 2.2 启用custom_build_dir2.2.1 调整gitlab-runner的配置文件2.2.2 CI文件…

网络IP协议

IP(Internet Protocol,网际协议)是TCP/IP协议族中重要的协议,主要负责将数据包发送给目标主机。IP相当于OSI(图1)的第三层网络层。网络层的主要作用是失陷终端节点之间的通信。这种终端节点之间的通信也叫点…

SpringCloud源码-Ribbon

一、Spring定制化RestTemplate,预留出RestTemplate定制化扩展点 org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration 二、Ribbon定义RestTemplate Ribbon扩展点功能 org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguratio…

MySQL5.7.26-Linux-安装(2024.12)

文章目录 1.下载压缩包1.访问MySQL版本归档2.找到5.7.26并下载3.百度网盘 2.Linux安装1.卸载原来的MySQL8.0.26(如果没有则无需在意)1.查看所有mysql的包2.批量卸载3.删除残留文件**配置文件**(默认路径): 4.**验证卸载…

python修改ppt中的文字部分及插入图片

批量修改ppt中的某个模块,或者批量制作奖状等场景会用到; import os import pandas as pd from pptx import Presentation from pptx.util import Inchesfilepath/Users/kangyongqing/Documents/kangyq/202303/分析模版/批量制作/file1时段预警_副本.pp…

Ubuntu24.04.1 LTS+Win11双系统安装记录

Win11相关 1.用DiskGenius删除硬盘分区 2.关闭win11的BitLocker,否则禁用安全启动后开机时需要帐户密钥,很麻烦。 3.在设备管理器中找到独立显卡,右键禁用。等ubuntu装好显卡驱动后,再进入win启用。 Ubuntu相关 1.Ubuntu24.04在…

covid-vaccine-availability-using-flask-server

使用烧瓶服务器获得 Covid 疫苗 原文:https://www . geesforgeks . org/co vid-疫苗-可用性-使用-烧瓶-服务器/ 在本文中,我们将使用 Flask Server 构建 Covid 疫苗可用性检查器。 我们都知道,整个世界都在遭受疫情病毒的折磨,唯一能帮助我们…

机器学习笔记 - 单幅图像深度估计的最新技术

1、深度估计简述 单眼深度估计是一项计算机视觉任务,AI 模型从单个图像中预测场景的深度信息。模型估计场景中对象从一个照相机视点的距离。单目深度估计已广泛用于自动驾驶、机器人等领域。深度估计被认为是最困难的计算机视觉任务之一,因为它要求模型理解对象及其深度信息之…

MarkDown怎么转pdf;Mark Text怎么使用;

MarkDown怎么转pdf 目录 MarkDown怎么转pdf先用CSDN进行编辑,能双向看版式;标题最后直接导出pdfMark Text怎么使用一、界面介绍二、基本操作三、视图模式四、其他功能先用CSDN进行编辑,能双向看版式; 标题最后直接导出pdf Mark Text怎么使用 Mark Text是一款简洁的开源Mar…

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance)

阻抗(Impedance)、容抗(Capacitive Reactance)、感抗(Inductive Reactance) 都是交流电路中描述电流和电压之间关系的参数,但它们的含义、单位和作用不同。下面是它们的定义和区别: …

一文大白话讲清楚CSS元素的水平居中和垂直居中

文章目录 一文大白话讲清楚CSS元素的水平居中和垂直居中1.已知元素宽高的居中方案1.1 利用定位margin:auto1.2 利用定位margin负值1.3 table布局 2.未知元素宽高的居中方案2.1利用定位transform2.2 flex弹性布局2.3 grid网格布局 3. 内联元素的居中布局 一文大白话讲清楚CSS元素…

APM 3.0.2 | 聚合B站、油管和MF的音乐播放器,支持歌词匹配

APM(Azusa-Player-Mobile)是一款基于B站的第三方音频播放器,现已扩展支持YouTube Music、YouTube、本地音乐、AList和MusicFree等平台。它不仅提供视频作为音频播放,还具备排行榜、分区动态等功能。用户可以通过添加Alist地址接入…

html+css+js网页设计 美食 美食天下2个页面

htmlcssjs网页设计 美食 美食天下2个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…

TCP粘/拆包----自定义消息协议

今天是2024年12月31日,今年的最后一天,希望所有的努力在新的一年会有回报。❀ 无路可退,放弃很难,坚持很酷 TCP传输 是一种面向二进制的,流的传输。在传输过程中最大的问题是消息之间的边界不明确。而在服务端主要的…