关于P2P & PeerJS

P2P 是一种分布式网络架构,其中每个参与者(也称为节点)充当客户端和服务器的角色。 与传统的客户端-服务器模型不同,P2P 允许直接的节点之间通信,而无需通过中央服务器进行转发。

PeerJS:一个基于 WebRTC 的 JavaScript 库,用于简化 P2P 通信的实现。

P2PGIF

更新:

  • 刷新功能重做
  • 显式房间人数(roomIds数组)
  • 自动清除信息
  • 流媒体源扩展(更多设备支持)
  • 图片上传封面与图片消息
  • 修复关闭标签页但连接仍然保留的BUG
  • 直播网页全屏
  • 单文件版本更新
  • 自动连接优化(参数可自调autoJoin(每个节点推荐人数))
  • 视频标签样式优化

下个版本的计划:

  • 如有bug则修,一般不会再有大更新了
  • 汉化工作

多房间型(URL->ROOT)

如果在互联网上已经有人访问了root网页并持有了上述的默认id,可以直接访问URL -> Index

  • 文件说明:
  • P2PLiveIndex.html 为网站主页(用于展示准备发起直播的房间,并为之提供入口)
  • P2PLiveRoot.html 为网站根节点(根节点为监听器,负责获取发起直播的所有ID,并递交给主页)
  • P2PLiveHost.html & P2PLiveAudience.html 为附属页面,置于同目录下即可

用法:

  • [ 对于站长 ]
  1. 联网并使用浏览器读取根节点页面(P2PLiveRoot.html)
  2. 分享根节点页面的id给用户
  • [ 对于观众 ]
  1. 联网并使用浏览器读取主页(P2PLiveIndex.html),填入根节点的ID并按下连接按钮
  2. 观众在执行第一步后可以看到该根节点下的所有活跃直播间(列入标准不在于是否推流,而是直播页面的连接情况)
  • [ 对于主播 ]
  1. 联网并使用浏览器读取主页(P2PLiveIndex.html),填入根节点的ID并按下连接按钮
  2. 点击去开播之后点击共享本地流

注意事项

  1. 如果建立连接发生在主机开始共享流媒体之前,再次点击刷新按钮会刷新接收的流媒体(如不可用则刷新整个页面)
  2. 在主播丢失连接时,则无法将主播子节点的信息传递给其他主播子节点
  3. 子节点在传递给子子节点时视频质量开始可能模糊,尝试等待即可(一次测试26s后画质同步)
  4. 通常,主页会默认尝试连接id"P2P-Live-Web-Default-Id" (可以使得连接到持有此id的页面更加便捷,但是如果被占用,自己的root页面就无法再持有,所以可以修改成自己的再转发给别人)

单文件版本

用法:

  1. 将文件在本地读取直接访问现成网址等
  2. 直播方点击共享本地流按钮,并且分享自己的ID给观众
  3. 观众与主播的id任意相连,不过需要保持中间不断开,如果中间断开则需更换连接对象

注意事项

  1. 根节点具有推流最高优先级,它会覆盖所有子节点及其子子节点等的直播
  2. 直播媒体流只会推送到子节点,而不像信息通道无论在哪个节点都可以收到信息,故所连接的根节点最好是直播节点或监听器的子节点(即流媒体单向传递,文本双向传递

对于P2P-Live-web

它采用节点式传递,允许数据直接从一个节点传递到另一个节点,这意味着无论连接谁,都可以收到相同的文字互动信息,而且无需依赖中央服务器,大大减少网络延迟。

DeliverGIF

常用数组

  • nodesMap[ 消息类型 -> 1, 来源: 0(child)/1(host), 子节点个数: number, 房间内的所有id, 直播标题, 直播简介, 直播封面, 主办方id, 主办方子节点, 根节点id]

  • child_Nodes[ 消息类型 -> 1, 来源: 0(child)/1(host), 子节点个数: number, 房间内的所有id(限单文件版), 所属id, 所属名称, 未启用的扩展接口, 子节点A的id, 子节点A的名称, 子节点A的子节点, 子节点B的id....]

标识

  • 消息类型: 0 -> 互动信息, 1 -> 节点信息收集用, 2 -> 流媒体请求, 3 -> 提醒更换父节点, 4 -> 流媒体呼叫刷新请求

对于exchange

仅用于两端相互交换流媒体而非传递,要求连接方和接收方都提交流媒体,如果增加第三者,其中一个人的流媒体会被覆盖

Issue:

连接无反馈

  • 由于P2P本身的局限性,有些网络之间难以建立P2P连接,不过可以通过桥接都可以连接网络来解决

点首页的刷新导致页面蒸发

  • 莫名奇妙的Bug罢了

关于本地Peer服务器

PS(如果不想本地运行自行忽略):

PeerServer

先装npm,国内cnpm也可以,然后安装peer:

npm install peer -g

其中-g可选,表示全局安装,安装至用户文件夹,否则当前目录 然后用下面命令可以启用本地peer服务器(路径等值需要与网页内peerjs统一)

peerjs --port 9000 --key peerjs --path /myapp Started PeerServer on ::, port: 9000, path: /myapp

修改JS引用路径

在head标签中引用远程js路径改为本地的js路径,示例如下

<script src="js/peerjs.min.js"></script>

<!--script src="https://unpkg.com/peerjs@1.5.2/dist/peerjs.min.js"></script-->

关于P2P & PeerJS

P2P 是一种分布式网络架构,其中每个参与者(也称为节点)充当客户端和服务器的角色。 与传统的客户端-服务器模型不同,P2P 允许直接的节点之间通信,而无需通过中央服务器进行转发。

PeerJS:一个基于 WebRTC 的 JavaScript 库,用于简化 P2P 通信的实现。

P2PGIF

更新:

  • 刷新功能重做
  • 显式房间人数(roomIds数组)
  • 自动清除信息
  • 流媒体源扩展(更多设备支持)
  • 图片上传封面与图片消息
  • 修复关闭标签页但连接仍然保留的BUG
  • 直播网页全屏
  • 单文件版本更新
  • 自动连接优化(参数可自调autoJoin(每个节点推荐人数))
  • 视频标签样式优化

下个版本的计划:

  • 如有bug则修,一般不会再有大更新了
  • 汉化工作

多房间型(URL->ROOT)

如果在互联网上已经有人访问了root网页并持有了上述的默认id,可以直接访问URL -> Index

  • 文件说明:
  • P2PLiveIndex.html 为网站主页(用于展示准备发起直播的房间,并为之提供入口)
  • P2PLiveRoot.html 为网站根节点(根节点为监听器,负责获取发起直播的所有ID,并递交给主页)
  • P2PLiveHost.html & P2PLiveAudience.html 为附属页面,置于同目录下即可

用法:

  • [ 对于站长 ]
  1. 联网并使用浏览器读取根节点页面(P2PLiveRoot.html)
  2. 分享根节点页面的id给用户
  • [ 对于观众 ]
  1. 联网并使用浏览器读取主页(P2PLiveIndex.html),填入根节点的ID并按下连接按钮
  2. 观众在执行第一步后可以看到该根节点下的所有活跃直播间(列入标准不在于是否推流,而是直播页面的连接情况)
  • [ 对于主播 ]
  1. 联网并使用浏览器读取主页(P2PLiveIndex.html),填入根节点的ID并按下连接按钮
  2. 点击去开播之后点击共享本地流

注意事项

  1. 如果建立连接发生在主机开始共享流媒体之前,再次点击刷新按钮会刷新接收的流媒体(如不可用则刷新整个页面)
  2. 在主播丢失连接时,则无法将主播子节点的信息传递给其他主播子节点
  3. 子节点在传递给子子节点时视频质量开始可能模糊,尝试等待即可(一次测试26s后画质同步)
  4. 通常,主页会默认尝试连接id"P2P-Live-Web-Default-Id" (可以使得连接到持有此id的页面更加便捷,但是如果被占用,自己的root页面就无法再持有,所以可以修改成自己的再转发给别人)

单文件版本

用法:

  1. 将文件在本地读取直接访问现成网址等
  2. 直播方点击共享本地流按钮,并且分享自己的ID给观众
  3. 观众与主播的id任意相连,不过需要保持中间不断开,如果中间断开则需更换连接对象

注意事项

  1. 根节点具有推流最高优先级,它会覆盖所有子节点及其子子节点等的直播
  2. 直播媒体流只会推送到子节点,而不像信息通道无论在哪个节点都可以收到信息,故所连接的根节点最好是直播节点或监听器的子节点(即流媒体单向传递,文本双向传递

对于P2P-Live-web

它采用节点式传递,允许数据直接从一个节点传递到另一个节点,这意味着无论连接谁,都可以收到相同的文字互动信息,而且无需依赖中央服务器,大大减少网络延迟。

DeliverGIF

常用数组

  • nodesMap[ 消息类型 -> 1, 来源: 0(child)/1(host), 子节点个数: number, 房间内的所有id, 直播标题, 直播简介, 直播封面, 主办方id, 主办方子节点, 根节点id]

  • child_Nodes[ 消息类型 -> 1, 来源: 0(child)/1(host), 子节点个数: number, 房间内的所有id(限单文件版), 所属id, 所属名称, 未启用的扩展接口, 子节点A的id, 子节点A的名称, 子节点A的子节点, 子节点B的id....]

标识

  • 消息类型: 0 -> 互动信息, 1 -> 节点信息收集用, 2 -> 流媒体请求, 3 -> 提醒更换父节点, 4 -> 流媒体呼叫刷新请求

对于exchange

仅用于两端相互交换流媒体而非传递,要求连接方和接收方都提交流媒体,如果增加第三者,其中一个人的流媒体会被覆盖

Issue:

连接无反馈

  • 由于P2P本身的局限性,有些网络之间难以建立P2P连接,不过可以通过桥接都可以连接网络来解决

点首页的刷新导致页面蒸发

  • 莫名奇妙的Bug罢了

关于本地Peer服务器

PS(如果不想本地运行自行忽略):

PeerServer

先装npm,国内cnpm也可以,然后安装peer:

npm install peer -g

其中-g可选,表示全局安装,安装至用户文件夹,否则当前目录 然后用下面命令可以启用本地peer服务器(路径等值需要与网页内peerjs统一)

peerjs --port 9000 --key peerjs --path /myapp Started PeerServer on ::, port: 9000, path: /myapp

修改JS引用路径

在head标签中引用远程js路径改为本地的js路径,示例如下

<script src="js/peerjs.min.js"></script>

<!--script src="https://unpkg.com/peerjs@1.5.2/dist/peerjs.min.js"></script-->

About P2P & PeerJS:

P2P is a distributed network architecture where each participant (also known as a node) acts as both a client and a server Unlike the traditional client-server model, P2P allows direct communication between nodes without the need for relay through a central server

PeerJS: A JavaScript library based on WebRTC for simplifying P2P communication implementation

P2PGIF

Update:

  • Better Auto-join(number for setting)
  • upload image as cover & message
  • function of refresh redo
  • new media source(support more devices)
  • display the number of persons in the room
  • repair the bug of tab closed but connection active
  • video full screen & better style
  • auto-clean message
  • single version update

Next Version Plan:

  • clean bug

Multi-Room Type (URL->ROOT)

if someone has already opened root page on the Internet, you can directly use URL -> Index

  • Instructions of files:
  • P2PLiveIndex.html serves as the website homepage (displaying rooms ready for live streaming and providing entry points)
  • P2PLiveRoot.html acts as the website's root node (responsible for monitoring and providing all IDs of live stream initiators to the homepage)
  • P2PLiveHost.html & P2PLiveAudience.html are auxiliary pages placed in the same directory

Instructions:

  • [For Server]
  1. use browser to load the root node page(P2PLiveRoot.html) with available Internet
  2. share id to users
  • [For Audiences]
  1. Use browser to load the homepage(P2PLiveIndex.html) with available Internet, [enter the root node's ID, and click the Connect button(deafault connect id can be modified in file)]
  2. After completing step one, audience members can view all active live streaming rooms under the root node (based on the connectivity status of the live streaming pages)
  • [For Streamers]
  1. Visit the homepage(P2PLiveIndex.html), [enter the root node's ID, and click the Connect button(deafault connect id can be modified in file)]
  2. Clicks Go To Live and then clicks Stream Source button

Considerations:

  1. If the connection is established before the host starts sharing the media stream, clicking the button again will refresh the received media stream(or refresh web)
  2. In the event of the host losing connection, the information from the host's child nodes will not be transmitted to other host's child nodes
  3. Video quality may initially be blurry when passed from child nodes to sub-child nodes; waiting for synchronization may resolve this (quality synchronization observed after 26 seconds in a test)
  4. By default, index request the id of "P2P-Live-Web-Default-Id" (It made better index connection. if your root id has already been occupied, you need to modify it)

Single Room Type Live Streaming

Instructions:

  1. Load the file locally or access directly via the following links
  2. The broadcaster clicks the Start Local Stream button and shares their ID with the audience
  3. The audience can connect to any broadcaster's ID, but the connection must remain uninterrupted If the connection is broken in the middle, a new connection object is required

Considerations:

  1. The root node has the highest priority for streaming, overriding all child nodes and their subsequent children's live streams
  2. Live media streams are only pushed to child nodes, unlike the information channel where messages can be received from any node. Therefore, it is advisable for the connected root node to be a live streaming node or monitor (unidirectional media streaming, bidirectional text messaging).

For P2P-Live-web

it employs a node-based delivery that allows data to be passed directly from one node to another, enabling the same text interaction message to be received by anyone connected without relying on a central server, thus significantly reducing network latency

DeliverGIF

Commonly used arrays

  • nodesMap[ msgClass -> 1, source: 0(child)/1(host), Total number of child nodes: number, all of ids in room, Live_Title, Live_Summary, Live_CoverURL, host_Id, host_Name, child_Nodes, root_Id]

  • child_Nodes[ msgClass -> 1, source: 0(child)/1(host), Total number of child nodes: number, all of ids in room, own_Id, own_Name, useless array for extension, child_A_Id, child_A_name, child_Nodes_Of_Child_A, child_B_Id...]

mark

  • msgClass: 0 -> msg, 1 -> nodes Collecter, 2 -> streaming request, 3 -> remingder of replacing the parent node, 4 -> application of refresh media stream

Issue:

Connect without feedback(failed):

Due to the inherent limitations of P2P,establishing connections between some networks can be challenging, but this can be resolved by bridging networks

Regarding exchange

it is only used for bilateral exchange of media streams rather than transmission. Both the connecting and receiving parties need to submit media streams. If a third party is added, one person's media stream will be overwritten

About Local Peer Server:

(ignore it if you don't run peerjs server locally):

PeerServer

Need to install nodejs at first, and then use its npm to install peer

npm install peer -g

-g is selective if you only want to use in a folder local peer server run command(value of path need to be united on web & terminal):

 peerjs --port 9000 --key peerjs --path /myapp Started PeerServer on ::, port: 9000, path: /myapp

Modify JS path

Modify path of remote peerjs.min.js to local path of js in headP (example)

<script src="js/peerjs.min.js"></script>

<!--script src="https://unpkg.com/peerjs@1.5.2/dist/peerjs.min.js"></script-->
  • Date: 2023-06-29
  • Modified: 2024-01-23

前言

  • 建议配合视频教程左侧目录食用,电脑读者请通过目录跳过Android&Termux的相关教程),这是一篇面向新萌的教程,提供我已知的最优解,但不一定是最好;完成一个服务器需要一台满足配置要求(因目标而定)的设备,能够正常运行的对应程序的服务器端(程序自带或给常见链接自行下载),一个能够使用且支持对应协议的内网穿透工具或者联机工具(后面会列出,自选即可)和一颗能够坚持学下去的恒心(学会了还是蛮简单的)
  • 注:不同应用通信需要选择合适等方法、协议、端口(下文有判断方法)
  • 应用联机主要包含三大方式(网站大都采用第一种,游戏通常是第二、三种局域网):
  • !PS:本教程是部署第一种实现方法或将第二、三种实现方法转为第一种并部署以此打破空间限制!
    • 中间服务器实现(服务器托管或内网穿透等):通过内网连接公网,处于公网中的服务器中转分发主机的数据实现联机。优点:可以打破空间限制,将处于世界各地的人汇合组建一个小网络,并且通常服务器有更丰富的配置文件提供,启动更快,配置更灵活方便;缺点:学习成本相对较高,较长的信息传输线路导致延迟相对较高。
    • 局域网下实现:通过设备连接路由器,由路由器中转分发主机的数据实现一个内网中设备之间的信息交换。优点:速度快,简单没有学习压力;缺点:受到空间限制,必须在同一个网络下才能进行信息交换
    • 通过预设本地的多人操作位置实现(多见于游戏):通过程序预先设置好的位置,允许多个人共用一台设备进行不同位置间的信息共享。优点:几乎没有信息传输间的延迟,更加稳定,几乎为零的学习成本,且大大节约了应用的开发成本,在代码上更容易实现;缺点:严格的空间限制,所有人必须共用一台设备,而且位置受硬件规格限制,需要外接设备(如手柄)。

手机开服务器见左侧

移动端搭建服务器教程

各种游戏联机方法示例

只列出部分游戏,主要看自己判断;支持ip直连(内网穿透或公网主机)的也都支持异地组网

异地组网:适合仅提供本地服务器与本地搜索入口的应用(注:游戏自身指定服务器的不可,比如内置联机服务器的破解游戏)

MC、TR(PE)、饥荒、星露谷、铁锈、红警、求生之路系列

内网穿透:适合提供指定IP入口的应用

TR、MC、饥荒、星露谷、铁锈、星露谷、求生之路系列

远程协助:适合主机类共屏游戏,手柄不可远程输入,所以有手柄的作主机让键盘当客机

DR2C、武装原型、鸭子游戏、回旋标

类型一:提供IP直连的程序(通过中间服务器实现远程联机)

判断方法:允许通过输入字符串类型的值来连接服务器(如同浏览器的地址栏),该类型程序一般允许用户自己创建连接服务器或者直接连接,典型的如:我的世界(Minecraft)、泰拉瑞亚(Terraria)、星露谷物语(Stardew Valley)、铁锈战争(Rusted Warfare)、生存战争(Survivalcraft)联机版等


  1. 1.部署本地服务端(必需-准备)

启动对应的服务端程序(可能需要填入部分配置信息)并等待部署完成即可,有的软件不自带服务端的启动程序,或者其不能够满足服务器的需求,因此需要下载对应的服务端:

安装服务端

无论何种平台大概流程都是[配置运行环境]-->运行服务器端-->公开服务器端口

  • Java端服务器
  • 关于Java版开服:

sudo apt install openjdk-17 #版本与服务端挂钩1.16.5&-请安装使用jdk8

选择合适服务端需求版本的java后下载服务器端

如果openjdk不能用去官网下对应版本的javajdk/jre,无系统archarm64/arm64,有则按照系统下载对应包

Linux通过终端命令行运行;Windows创建bat文件运行服务端

   java -Xms1024M -Xms2048M -jar 服务器端名称.jar
  • 或java -jar 服务端名称.jar自动分配内存。
  • 其中Xms最小内存,Xmx最大内存,单位可以为M也可以为G,也可以默认自适应。
  • 服务端名称是下载使用哪个服务端就填哪个服务端的名称,forge先双击安装程序(需java运行环境)运行并安装服务器端
  • 启动带GUI的服务端可以在后面加 nogui来取消运行时启动独立窗口
  • java是使用默认环境变量的java,当1.16.5&-版本服务器运行时可能不兼容新版,可以在计算机中安装多个版本的java并使用绝对路径来运行服务器端如下(Linux用./同理):
"C:\Program Files\Java\jre1.8.0_351\bin\java" -Xms1G -Xmx2G -jar paperc.jar nogui
  • 第一次运行需要先改eula.txt文件中eula=后面的false改为true即同意上述协议,修改完成后保存再次启动(Linux进入vim默认命令模式后按i进入插入模式开始写入,按ESC切换为命令模式,输入:wq保存并退出,:q!不保存强制退出)
sudo apt install vim #linux安装编辑器,已安装跳过
vi eula.txt

之后再次启动会下载所需文件,耐心等待,若下载出现错误可以开网络工具或者在log报错文件中找到报错的文件地址手动下载,手动下载再失败可以复制地址到网盘的P2P下载器下载。

  • Stop停止并保存服务器,注该开服方法不适用于国内版MC,且国内版MC与国际版不能互通
MC开服成功后相关内容
  • 配置文件

位置:服务器目录下Serverpropreity

  • 出生点保护:spawn-protection=16 #半径
  • 启用命令方块:enable-command-block=false #默认关闭,故有些地图无法使用,启用即可正常
  • 更多请跳转至wiki
  • 基本命令

控制台内无"/",游戏内需加"/"

op 玩家名 #使指定玩家获取权限
deop 玩家名 #作用与op相反
ban 玩家名 #将指定玩家踢出服务器(封禁)
Java服基础上实现与BE(基岩)互通

进不去下载页面试试魔法或代理或修改dns

以下链接为构建页面,选择一个最新构建的分支下载需对应需要的jar

Geyser-Fabric安装在mods文件夹 >服务器要求使用任何 客户端Mod 都会导致基岩版玩家无法进入服务器, Geyser-Spigot作为插件安装在plugins文件夹,服务器内/reload /reload confirm可以重载服务器插件 Geyser-Velocity独立端,单独窗口运行

  • quote:如果你使用的服务端核心并不支持 Java 16,请在 启动参数 添加 -DPaper.ignoreJavaVersion=true 来使得你的服务端能够正常运行。
  • 如果你的服务端核心实在无法在 Java 16 上运行,请考虑使用 独立版。
  • 手机版开互通服不建议使用独立端,需要较高性能
  • 一些旧版本的 Geyser 只和 Floodgate 1.0 适配而不支持 Floodgate 2.0,所以建议最新版
  • 关于Floodgate: >下载并放置在服务端目录下plugins文件夹内 >+ quote:你可以在各个子服上安装 Floodgate (但 Geyser 真的没必要) 来增强玩家的皮肤显示功能和在子服上使用 Floodgate API。如果你要这么做,你 必须 保证你将代理服务端内 Floodgate 文件夹内的 key.pem 文件放置到了 所有子服的 Floodgate 文件夹内的相同位置,否则,基岩版客户端无法加入服务器。 >+ 你只需在使用独立版上进行此步骤:复制 Floodgate 配置所在的目录下的 key.pem 文件到 Geyser独立版 的文件夹内。不要尝试将这个文件分享给其他人!这个密钥文件允许基岩版账号绕过 Java 版身份验证,如果有人拿到了它,他们可能会对您的服务器造成严重破坏 >+ 在你的 Floodgate 配置中,将 username-prefix 设置为你需要的前缀 - 你可以设置为 "" 以关闭基岩版前缀功能。 >> 在一些旧版本的 Paper 服务器(或者 Paper 的一些分支),你或许需要关闭你的服务器并删除你的 服务端 jar 文件同目录下的的usercache.json 文件以避免出现你的老的 Floodgate 玩家的前缀没有更新的问题。

  • 配置完Geyser[&Floodgate]后,服务端就配置完成了

仅基岩版相关

适合只开手机服务器的用户

####下载并解压服务端文件####
wget https://minecraft.azureedge.net/bin-linux/bedrock-server-1.18.12.01.zip #换成自己版本
unzip bedrock-server-1.18.12.01.zip -C minecraftbeserver/ #目录换成你自己想要的好记的名
####运行命令####
LD_LIBRARY_PATH=. ./bedrock_server
  • 修改配置文件同上,如:player-idle-timeout=0 #挂机踢出时间,0为不因挂机超时踢出玩家

1.4以下版本win用户可不安装新版dotnet,建议先启动试试不能启动再安装运行环境。另外:手机termux开tshock的服必须在proot/chroot环境中,需要安装一个linux系统

Windows安装dotnet后双击服务端程序直接运行即可

Windows游戏存档等目录:资源管理器--->左侧:我的文档/My Games/Terraria/ +Linux安装dotnet命令(termux旧版使用mono):

sudo apt install dotnet-sdk-6
  • Linux或使用脚本安装 >```bash

wget https://dot.net/v1/dotnet-install.sh -Oc dotnet-install.sh sudo chmod +x ./dotnet-install.sh ./dotnet-install.sh --channel 6.0 #可修改版本,推荐6.0 dotnet TerrariaServer.exe #运行服务器

apt install mono-complete

*TerariaServer.exe服务端游戏本体目录下自带,linux也是先下载游戏本体,进入游戏目录运行服务端文件*

  • Linux原版服务器: >```bash

#64位操作系统先执行以下命令 sudo add-apt-repository multiverse sudo dpkg --add-architecture i386 sudo apt update sudo apt install lib32gcc1 #下面安装steamcmd,steam也可以,在游戏目录启动游戏即可 sudo apt install steamcmd ./usr/games/steamcmd #sudo bash ./... login + 用户名 #登录帐号 app_update 105600 #安装terraria cd ~/Steam/steamapps/common/Terraria ./TerrariaServer.bin.x86_64 #运行服务端

Linux游戏存档等路径:~/.local/share/Terraria/

wget -c #目标地址,-c是意外中断后再次下载能接上 sudo apt install unzip unzip TShock*.zip -d tshock cd tshock tar -xf TShock*.tar #解压目标文件,-C 加已经创建好的目录地址 mono TerrariaServer.exe #启动命令

*如果提示开始下载dotnet之后失败,则先自己安装dotnet,见上*

+ 开服后看情况保存超级管理员代码,只有第一次显示,没记下来如果需要可以删除tshock.sqlite&auth.lck文件然后重启,或者其他方法见下
+ TShock安装插件:将插件名.dll放在ServerPlugins下,重启后TShock会自动生成相应的配置文件
+ 版本差异时可以使用插件解决(如不同平台最新版不同时,但只能跨一个大版本内的子版本)[CrossPlay跨版本插件](https://github.com/Moneylover3246/Crossplay)
+ 通过控制台移动用户组至admin组获得管理权限(常用),或是游戏内输入/auth [authcode]获取超管权限,也可移动用户组至superadmin(超级管理员),但是**不建议**用超管游玩,**超级管理的角色数据不会被保存**
+ config.json配置文件在tshock目录下,如出生点保护范围之类,可以进行查阅&修改,之后重启更新服务器,[TShock官方帮助文档](https://ikebukuro.tshock.co/);[相关链接推荐csdn1](https://blog.csdn.net/shuishen49/article/details/54743316);[相关链接推荐csdn2]([https://blog.csdn.net/junknow/article/details/128260828)
+ TShock基本命令(控制台内无"/",游戏内需加"/"):
>+ 游戏内:
>/register 密码
>
>/login [password]
>
>/auth [authcode]
>
>+ 控制台:
>```bash
> ban 玩家名
> help [页数]
>```

#还是terraria的目录下 #steam更新命令:app_update <应用ID> [-beta <测试名称>] [-betapassword <密码>] [validate] 版本号自行查看,validate可以不成功时再加 app_update 1281930 +tml版本号 validate ./start-tModLoaderServer.sh

  • exit停止并保存服务器,该开服方法不适用于国内版TR,且国内版TR与国际版不能互通

作者团队及其教程地址瓦西里沃尔特 bilibili

需先安装Node.js > >bash npm install vue-cli -g 安装vue-cli vue init webpack my-project 初始化项目 npm install 安装项目依赖 npm run build 生成上线目录部署 nmp run dev 本地测试服务器 >

Ctrl+C关闭服务器

需先安装Node.jsGit >bash npm install hexo-cli -g 安装hexo-cli hexo init 文件夹名 cd进去后npm install安装npm即完成 hexo new "文章名" 新文章 hexo new page "页面名" 生成新页面 hexo s 本地预览 hexo g 上传暂存区 hexo d 上传到Github hexo server -p 端口号 修改本地部署的端口 >

Ctrl+C关闭服务器

  1. 2.监听程序端口(可跳过-准备)

这里也给出了一些常见的应用端口,如果包含在内,或者已知,请跳过此步骤

先启动游戏服务器或创建局域网房间后才能看到其端口和协议类型,下面列出常见软件的协议类型及其端口

  • 网站默认http/https(vue:8080;PHPstudy:80;Hexo:4000;......)
  • 泰拉瑞亚Terraria自带TShock:TCP7777
  • 我的世界Minecraft:Java:TCP25565;内置服务端随机BE基岩版:UDP19132(互通服两个都要映射)
  • 铁锈战争Rusted Warfare:TCP5132
  • 生存战争Survivalcraft联机版:UDP28887
  • 星露谷物语Stardew Valley:UDP24642
  • 像素工厂MindustryTCP+UDP双协议映射&相同对外端口
  • 饥荒:UDP地上10999&地下10998
  • ......(有的游戏服务器需要两条隧道才能正常运行,例如:未转变者Unturned(quit退出并保存服务器)、MC互通服等)

如果出现报错显示端口被占用相关问题,可以修改配置文件改变游戏默认的端口号,但有的程序不提供配置文件修改端口号,那也可以在下面操作找到占用该端口号的程序并将它结束掉;linux系统结束程序在下面

一般游戏端口及其协议类型可以搜到,或者界面会告诉你,如果没有再进行下面的步骤


图片加载失败了,不过不影响

  1. 启动资源监视器 >
  • 方法一:直接运行,按下Win+R,输入以下内容 C:\Windows\System32\perfmon.exe
  • 方法二:右键windows菜单栏 ——> 选择任务管理器 ——> 选择性能一栏 ——> 下面单击“打开资源监视器
  1. 监听程序端口

图片加载失败了,看视频吧,或者复制图片地址到浏览器地址栏里手动浏览

在菜单栏网络下的页面划到监听端口一栏 我们需要的是目标游戏的传输协议类型和它的端口号 这里以TShock为例,它的默认端口号7777协议类型TCP 一般游戏的协议为TCPUDP,要根据协议类型选择**合适的映射(内网穿透)**工具,因为有的映射工具不支持UDP,还有的不支持TCP、http。

打开终端,输入 netstat -a

  • 参数含义:-a 显示所有;-n 以ip形式显示当前建立的有效连接和端口;-u 显示UDP协议;-t 显示TCP协议;-p 显示对应PID与程序名
  • 如果该方法不可用,可尝试安装nmap扫描本地端口
  1. 3.内网穿透方式(通用-实现)

前言:这里主要介绍基于第三方免费平台的内网穿透,倘若自己部署内网穿透,需要一份有固定公网ip的服务器和一个已经备案的域名,这里不讲,想要部署的可以自己搜索相关教程,还是挺全面的。

内网穿透流程图,可能不正确

我在这里列出常见的平台:(以下为普通用户配置:不购买套餐

  • 花生壳:极低的学习成本;实名1M/s每月1G且无HttpUDP,固定域名
  • cpolar:学习成本低;无需实名;无限流量;动态域名UDP;速度较低;http协议提供免费动态域名
  • 飞鸽:学习成本低;0.5M/s,签到给流量;http协议提供免费域名免费两条隧道但http只能一条
  • MirrorEdge Frp镜缘(莱云)映射:学习成本一般;1元实名刷脸;速度限制取决于所选节点,隧道固定域名
  • OpenFrp 内网穿透:学习成本低(带GUI启动器和樱花相似)免费,签到领流量;部分节点无需实名;速度限制12M/s(速度取决于所选节点与访客距离);固定域名;http协议需要绑定自己的域名
  • NATAPP:学习成本一般;动态域名实名;1Mbps;http协议提供免费域名
  • 网云穿:学习成本低;实名;每月1G;前7天3M/s会员,后面锁TCP1M/s,固定域名
  • ngrok:学习成本一般;无需实名;只给一条免费隧道,离得近的节点延迟较低;http会自动换https协议(相当于不支持http
  • Nat123:学习成本一般;无需实名支付实名账号只给5个N币<1M/s;支持自定二级域名;仅支持http协议
  • 闪库:1M;仅支持Http随机固定域名;未来可能实名 (以下是其他我没用过的内网穿透)
  • 樱花:学习成本低;1毛付费刷脸实名必须18+;新5/老10M/s速度限制,固定域名,进不去网上有备用路线
  • frp:有较高的学习成本,是自己部署内网穿透的开源工具,但需要有条件(公网主机),可扩展性强,不少内网穿透就是基于它的(例如莱云、Locyan、凿洞)
  • Sunny-Ngrok:1块付费刷脸实名;钉钉内网穿透:早已停止服务;蜻蜓网络通无法注册;LoCyan Frp:之前节点不可用,最近Q群审核使用;凿洞Free Frp:我不会用,它老报错;U-anywhere万由云QuickConnect哲西云:加入花生壳了;nat123Tinc
  • ......(数据来源于2023.1,可能不准确如有需要在下面留言更新)
  1. 注册账号填写并完善相关信息(如绑定验证账号、实名等,没有则跳过),然后后再进入控制面板
  2. 创建隧道(有的在本地创建隧道,形式不一,但需要的信息基本一样),填入相关信息:隧道名、协议类型本地地址(127.0.0.1或局域网地址)以及本地端口(上面查的)。(有的支持自定义子域名或绑定自己的域名,也有的支持一定限度内自定义对外端口号,也有的允许你自选节点,可以根据配置需要选择)
  3. 云端部署好后开始部署本地,先下载对应平台的服务端程序有的需要将其与个人账号绑定,一般是通过个人账户的Token(或口令、密钥等)进行绑定;
  4. 复制云端隧道创建后给的Token与本地映射服务端进行绑定,或者给予窗口选择自己的隧道并启动,启动后给出的地址(一般为:地址:端口号;像http类型只有地址)就是他人访问的所用到的信息了。
  • 应用平台类型(相对简单)
  1. 注册账号填写并完善相关信息
  2. 创建隧道填入:隧道名、协议类型本地地址本地端口、[自选节点或宽带套餐]等信息
  3. 启动隧道,即可获取我们所需的地址(一般为:地址:端口号;像http类型只有地址)
  • 访客使用地址教程

网页:访客将给定的地址直接粘贴到浏览器的地址栏访问;主机可以用localhost127.0.0.1访问 游戏:访客选择多人游戏并选择加入相关,填入给定的地址加入即可;主机可以用localhost127.0.0.1访问。

  • 只给一个填写IP地址的输入框,则填写 地址:端口号 的形式(如:MCJava版)
  • 同时给出IP地址和端口号地址的,各填入各所需的地址和端口,英文冒号直接省去(如:Terraria、MCBE版)

此处以Terraria的TShock服务端Cpolar和飞鸽内网穿透为例(图示+简短文字描述):

  • Cpolar 快捷方法

    这是Cpolar较为便捷的操作方式 Cpolar方法一

  • 通用方法-以Cpolar和飞鸽为例

    ①②和Cpolar快捷方法的一样,创建后隧道管理界面会有相应隧道的访问地址 Cpolar方法二 启动后访问地址在隧道管理界面可见 飞鸽方法

  1. 4.IPv6公网方式(条件-实现)

  • 前言:理想状态下,IPv6延迟低,操作简单,免费且无需账号、认证等,不过前提是你的网络运营商向你提供IPv6服务,且你的电脑能够正常识别和使用,详细判断是否可用和配置教程可见相关教程【mc开服】教你白嫖运营商公网ipv6跟好兄弟联机】
  • 主机启动服务器后,访问端以 [对方的IPv6地址]:端口号 的格式直接连接即可
  • 注:这里没有条件不做演示,可移步到上方链接观看推荐视频学习。

类型二:提供局域网的程序(通过异地组网实现远程联机)

判断方法:提供IP直连的基本都支持局域网,因为你可以用路由器分配的地址对应程序的端口实现内网中不同设备信息交换,只是可能有些程序不提供现成的独立页面和自动搜索;也有一些程序仅支持使用局域网联机不开放IP直连,此类游戏一般有多人游戏的入口但既没有本地预设的P1234玩家位置,也没有IP直连的输入框,可能能够自动搜索网络下的房间。

  1. 1.部署本地服务器(必需-准备)

启动对应的服务端程序(可能需要填入部分配置信息)并等待部署完成即可,有的软件不自带服务端的启动程序,或者其不能够满足服务器的需求,因此需要下载对应的服务端

  • 房主:启动目标游戏--->多人游戏--->创建主机--->启动组网程序并加入同一组网网络--->等待其他玩家加入
  • 访客:启动目标游戏--->多人游戏--->启动组网程序并加入同一组网网络--->回到游戏在局域网下搜索主机并加入对应的房间

房主启动游戏后选择多人游戏--->创建主机即可(pe,pc同理)

方法一:启用游戏内置局域网服务器

房主启动游戏后选择单人游戏--->进入选定世界--->按键ESC--->对局域网开放--->(允许作弊:启用命令)创建一个局域网世界(给定的随机端口也可nat使用,但没必要)

方法二:部署服务端

请跳转至内网穿透部分查看部署服务器端方法,部署完后再回来下一步

  1. 2.异地组网方式(通用-实现)

前言:异地组网相较于其他方式依赖于软件的自动搜索,只是在理论上简单,实际操作更可能遇到问题,此时最好查询官方文档,这里我提出以下点建议:

  1. 组网成功后可以在命令提示符ping软件给出的虚拟网内其他用户的地址,以检查是否能够连通,若不能ping通大概率是不成功的
  2. 能ping通但软件自动搜索不能搜到,则检查防火墙的相关配置,若还是不行可以在对应的社区咨询
  • 中转服务器类型异地组网 异地组网流程图,但不一定正确

  • P2P类型异地组网 异地组网流程图,但不一定正确 我在这里列出常见的平台:(以下为普通用户配置:不购买套餐)

  • 常见平台

  • 蒲公英(已不完全免费):学习成本低;付费不推荐,简单,只要登录同一个账号即可;
  • Hiper(重名太多找不到链接):一个注册的账号付费后可以邀请其他人加入使用;签到送时长;学习成本低;宽带较好
  • EasyN2N:学习成本较低;只能Windows间使用,会自动安装一个虚拟网卡;加入同一个小组即可
  • Radmin LAN:学习成本低;只能Windows间使用,会自动安装一个虚拟网卡;加入同一个房间即可
  • UDPPLAN(博客):会选择自动安装一个虚拟网卡;简单免费;无需账号
  • TeamViewer(安装要选VPN):学习成本低;简单易用;但需要注册账号
  • ZeroTier:有一定学习成本;会自动安装一个虚拟网卡;管理能力强;但对网络要求较高,不过可以自己搭建plant
  • Tailscale
  • 游侠(已不完全免费)十分简单,需要实名认证
  • ......(数据来源于2023.1,可能不准确如有需要在下面留言更新)

0.注册账号[可能没有这一步] 1.创建一个网络,将网络的ID和验证密钥或者是网络名称和密钥给访客 2.访客通过给定的密钥加入该网络,即可实现异地组网

  • 无论是主机还是访客创建,只要在同一个网络下都一样,如果主机无法创建网络可以让访客试试
  • 房主创建本地服务器后,一般进入游戏选择多人游戏在局域网下搜索房主即可,有的游戏允许其他人通过组网平台给定的ip直连

此处以蒲公英红警2RadminLANMinecraft为例(图示+简短文字描述):

  • 蒲公英使用方法: 蒲公英使用教程
  • RadminLAN使用方法(通用): RadminLAN使用教程

类型三:本地预留位置的游戏(通过远程控制实现远程联机)

前言:远程控制操作起来相对简单,一般只能主机用手柄,其他连接的访客只能用键鼠。示例以向日葵为例,这里我列出常见的远程控制软件:

  • QQ/TIM仅支持PC间控制,免费但画质一般,有一定延迟,并且只能一对一连接;在好友面板选择远程协助,等待对方同意即可
  • 向日葵(v12绿色版无需账号登录):免费,可以多设备连接一台设备,功能较全;只需要把ID和验证码发给好友即可让好友远程控制。(连接人数较多时可能卡顿,重启向日葵服务并让好友们重新加入即可)
  • TeamViewer:免费;只需要把ID和验证码发给好友即可让好友远程控制。
  • Parsecwin10+):免费,易用,可以跨平台但有相应的系统版本限制,功能非常齐全,对游戏方面更加友好,但可能对网络有一定要求,不过有网页端可以用;既可以分享主机地址让他人加入(需要手动接受加入请求),也可以创建公开房间或者加入处于公开状态的房间来远程控制联机
  • 腾讯会议:免费简单;可能有一定延迟,视自己网络属性而定。
  • Steam远程畅玩(流式传输):免费,最简单,但需要双方互加好友(Steam有一定条件),而且对网络要求较高,可能用不了,需要有人游戏在库中;游戏内Shift+Tap唤出好友列表邀请好友远程畅玩即可
  • AnyDeskToDesk
  • ......(数据来源于2023.1,可能不准确如有需要在下面留言更新)

1.配置好游戏后,启动对应的远程协助软件,并通知好友启动相同的软件 2.将你的ID密钥给予好友,好友选择加入/连接功能远程获取你电脑的控制权及画面(QQ、Steam无密钥)?

  • 图文示例

    此处以向日葵DR2C为例(图示+简短文字描述): 向日葵使用方法: 向日葵联机教程 我不说是谁,好像有人的demo拼成了dome

其他附加问题

  • 若需手柄但没有,可以尝试使用DroidJoyMyJoy等软件将安卓手机转为手柄并连接电脑,亦或者是其他方法都。
  • 若好友电脑没有麦克风可以使用WO Mic来让安卓手机变为麦克风
  • 内网穿透要求实名但不满条件的,可以尝试不断使用新兴的或者国外的内网穿透工具,一般需要提交的信息较少
  • 游戏联机时非远程协助联机的服务器端的版本必须与用户端的版本相匹配,像TRMC可以通过安装跨版本插件(链接见下)来允许大版本内的联机兼容
  • 远程协助一般只有主机的手柄输入可以被识别,其他连接者只能使用键盘,因此大部分软件远程控制只能主机使用手柄

本文&视频中的链接汇总

Mindustry的Github发行页面

TML(Steam商店地址)(Mod) TShock服务端下载 CrossPlay跨版本插件 CrossPlay插件在TrBBS上的页面(旧)

  • Minecraft互通服

单开基岩版无插件无互通平台 MCpaper端下载 Geyser下载 Floodgate下载 多世界插件Multiverse-Core 背包隔离插件 空岛插件 空岛需要的前置插件 Forge下载 跨版本插件

  • 生存战争Survivalcraft联机版

SC联机版作者团队:瓦西里沃尔特

  • 红警双端联机

手机运行红警(b站视频教程)

总结

以上方法的最终目标都是打破空间限制实现远程联机,综合来看,原本联机空间越严格的程序在远程联机的方法上操作起来反而更简单。本次教程主要面向新萌,没什么技术力,如果有什么问题可以向我咨询,有什么错误可以指出,就是我不一定在线,回复可能较慢,见谅,感谢您的浏览O(∩_∩)O


手机搭建终端环境(内网穿透开服)

  • 这是专门为安卓手机提供的开服方法(IOS苹果手机需要先越狱然后使用NewTerm,虽同样都是终端命令,但我暂无条件更新相关教程),主要服务于内网穿透,或是异地组网和远程控制(安卓系统本身有软件提供异地组网和远程控制,frpc有内网穿透但是直接运行服务器端不方便,如果你不是为了开服建议使用原生安卓应用,除非特殊需要)如内网穿透frpc on githubfrpc on giteepc端请忽略该部分
  • 注:本教程内所有安装过程的选择直接回车默认即可
  • 安装termux

下载地址(github如若打不开,在地址github之前加字母k或https://ghproxy.com/,即https://kgithub...或https://ghproxy.com/https://github...):

  • Termux基础配置(最左下按钮为tab自动补全)
  • 换源命令(安卓7+版本):
termux-change-repo

直接回车(Enter)下一步后空格选择下方国内源后一路回车即可(安卓6及其以下不建议换源,如需则自行查找低版本换源命令)

  • 更新包管理工具
pkg upgrade && pkg update
apt upgrade && apt update
  • 获取手机内部储存
termux-setup-storage

注:Termux的文件都存在手机根目录,没有root无法访问,这些只能通过termux进行读写,使用此命令后,可在home目录下生成一个通往手机主目录的软链接。

  • 基本命令 >```bash

cd 目录 #进入当前目录下的指定目录,其中../为上级,cd ~中~表示当前操作用户目录。 rm -r 目录/文件 #递归删除,参数-r为递归,没有不能删目录 ls -a #列出当前目录下文件,-a参数显示隐藏文件 l #单l命令比ls更加便捷清晰(旧版termux没有,不过安装的系统内可使用) pwd #获取当前目录地址 mkdir 文件夹名 #在当前目录下新建文件夹(目录) Ctrl + C #键盘快捷键强制中断当前程序/废弃当前键入命令 #右滑可创建新会话(窗口)|唤起键盘 ####解压工具#### apt install unzip #安装 unzip 目标文件名.zip -d 释放目标目录(如无自动创建)

安装Linux系统

也可以不装,不过有些应用依赖无法启用(如dotnet),可能回导致应用无法启动,这时就需要安装系统(proot/chroot),否则可以直接使用启动命令

Android5以上通用方法(简单,内存充足时推荐)

+为什么建议该方法: >+ kali nethunter方法安装termux的linux系统,使用的包都可以支持最新版,不过这也导致了一些不兼容问题 >+ 并且该方法操作简单,无需多余步骤 >+ 缺点在于镜像只有完整版且占用内存较大(约11G),如果内存不足可用下面其他方法占用约1G+

  • Kali版本
  • 官方版本(需网络环境,没有则用镜像版)
pkg install git wget
wget -O install-nethunter-termux https://offs.ec/2MceZWr #–no-check-certificate
chmod +x install-nethunter-termux
./install-nethunter-termux
  • 使用wget下载时使用-c参数可防止意外中断,对于github相关地址可以在地址前加入"https://ghproxy.com/"代理加速
  • 国内镜像(无需代理)
git clone https://gitee.com/zhang-955/clone.git && cd clone && cd AutoInstallKali && chmod +x kalinethunter finaltouchup.sh
./kalinethunter
  • 国外github镜像(完整版同上)
curl -LO https://raw.githubusercontent.com/Hax4us/Nethunter-In-Termux/master/kalinethunter
chmod +x kalinethunter
./kalinethunter

如果下载过程中断需要手动rm(删除)损坏的包,然后重新执行安装脚本("./开头的是执行脚本命令") 低版本在通过该系统在安装部分应用时,最新版本可能会出故障

  • 获取linux系统权限
su
toor

获取root权限:toor是默认密码,或者kali(Linux的一个用户,Android也有root用户,但不是同一个) kali内置的工具不做介绍,并且有些需要root才可正常使用

Android5-6安装系统方法

  • kali见上
  • 安装其他版本(如果一个失败可换其他的):

1.脚本一键安装(国光)

pkg install proot git python -y
git clone https://github.com/sqlsec/termux-install-linux
cd termux-install-linux
python termux-linux-install.py

之后输入数字选择对应操作,安装完后使用下面命令启动

#Ubuntu换成自己安装的系统
cd ~/Termux-Linux/Ubuntu #文件所在目录
./start-ubuntu.sh

2.通过atlio安装linux系统

  • 精简版本(没内存推荐)
  • 直链需魔法,建议加代理前缀,方法见上
  • 安装运行依赖
pkg install python curl proot
  • CN中文版
curl -o $PREFIX/bin/atilo https://raw.githubusercontent.com/YadominJinta/atilo/master/CN/atilo_cn && chmod +x $PREFIX/bin/atilo
  • EN英文版(多几个镜像)
curl -o $PREFIX/bin/atilo https://raw.githubusercontent.com/YadominJinta/atilo/master/atilo && chmod +x $PREFIX/bin/atilo

如果提示缺少插件则输入(先更新一次pip,否则不兼容包存在会导致更新失败)

pip install --upgrade pip -i http://pypi.douban.com/simple --trusted-host pypi.douban.com && pip install 'requests' tqdm 'prettytable' bs4  -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

安装&启动命令:

atilo images #列出可用镜像
atilo pull ubuntu #下载&安装ubuntu镜像(自选)
atilo run ubuntu #ubuntu换成安装自己的系统
  • 如果启动过程中提示需要代理而且你又没有代理,可以尝试修改DNS或者换个时间段再试试,一般国内傍晚就连不上了
  • Github方法(可能需要网络环境): >```bash

pkg in git git clone https://github.com/jerrychen110/atilo chmod +x ~/atilo ./atilo ubuntu #启动命令

ubuntu换成自己想要的系统,不带参数可以查看命令帮助;启动报错proot可以试试其他方法或者更换网络环境再删除重下系统(一般下载系统镜像不会太快,太快就可能是网络故障)

安装好系统后下面参考linux操作方法开服,不过termux要下载arm64的包,其他设备的linux系统架构自行查看并下载使用对应包

如果apt seach也找不到对应的包可能是你没更新源

Android7&+安装系统方法

  • 脚本安装(功能丰富,推荐) >```bash

bash -c "$(curl -Lv gitee.com/mo2/linux/raw/master/debian.sh)"

不重启termux(长按more->kill 所有会话->重新启动termux)使用debian-i进入管理面板或startvnc命令进入系统

重启后输入debian即可进入系统
  • 手动安装(占用少,网络环境要求较高,没魔法国内够呛) >```bash

pkg install proot-distro proot-distro install ubuntu proot-distro login ubuntu #进入系统命令

ubuntu可换成自己喜欢的系统(proot-distro list查看可用镜像),建议先proot-distro list查看支持系统,有些系统不支持部分手机架构,请阅读其简介下载合适的

termux系统常见问题

  • 旧版termux安装的系统没有内置的互通存储目录,通过创建软链接连接termux储存目录时mv 文件 ../后回到../没有文件,可以去系统的/data/data/com.termux 目录查看,建议直接mv至~(用户目录)
  • 注意:本文往后以Debian系系统(Debian、Ubuntu、Kali等)为例,其他系统包管理器命令自行查找(如ArchLinux的pacman)
  • apt添加储存库: >```bash

apt-get install software-properties-common add-apt-repository ppa:openjdk-r/ppa #jdk8示例

各种游戏联机方法示例

只列出部分游戏,主要看自己判断;支持ip直连(内网穿透或公网主机)的也都支持异地组网

异地组网:适合仅提供本地服务器与本地搜索入口的应用(注:游戏自身指定服务器的不可,比如内置联机服务器的破解游戏)

MC、TR(PE)、饥荒、星露谷、铁锈、红警、求生之路系列

内网穿透:适合提供指定IP入口的应用

TR、MC、饥荒、星露谷、铁锈、星露谷、求生之路系列

远程协助:适合主机类共屏游戏,手柄不可远程输入,所以有手柄的作主机让键盘当客机

DR2C、武装原型、鸭子游戏、回旋标

类型一:提供IP直连的程序(通过中间服务器实现远程联机)

判断方法:允许通过输入字符串类型的值来连接服务器(如同浏览器的地址栏),该类型程序一般允许用户自己创建连接服务器或者直接连接,典型的如:我的世界(Minecraft)、泰拉瑞亚(Terraria)、星露谷物语(Stardew Valley)、铁锈战争(Rusted Warfare)、生存战争(Survivalcraft)联机版等


  1. 1.部署本地服务端(必需-准备)

启动对应的服务端程序(可能需要填入部分配置信息)并等待部署完成即可,有的软件不自带服务端的启动程序,或者其不能够满足服务器的需求,因此需要下载对应的服务端:

安装服务端

无论何种平台大概流程都是[配置运行环境]-->运行服务器端-->公开服务器端口

  • Java端服务器
  • 关于Java版开服:

sudo apt install openjdk-17 #版本与服务端挂钩1.16.5&-请安装使用jdk8

选择合适服务端需求版本的java后下载服务器端

如果openjdk不能用去官网下对应版本的javajdk/jre,无系统archarm64/arm64,有则按照系统下载对应包

Linux通过终端命令行运行;Windows创建bat文件运行服务端

   java -Xms1024M -Xms2048M -jar 服务器端名称.jar
  • 或java -jar 服务端名称.jar自动分配内存。
  • 其中Xms最小内存,Xmx最大内存,单位可以为M也可以为G,也可以默认自适应。
  • 服务端名称是下载使用哪个服务端就填哪个服务端的名称,forge先双击安装程序(需java运行环境)运行并安装服务器端
  • 启动带GUI的服务端可以在后面加 nogui来取消运行时启动独立窗口
  • java是使用默认环境变量的java,当1.16.5&-版本服务器运行时可能不兼容新版,可以在计算机中安装多个版本的java并使用绝对路径来运行服务器端如下(Linux用./同理):
"C:\Program Files\Java\jre1.8.0_351\bin\java" -Xms1G -Xmx2G -jar paperc.jar nogui
  • 第一次运行需要先改eula.txt文件中eula=后面的false改为true即同意上述协议,修改完成后保存再次启动(Linux进入vim默认命令模式后按i进入插入模式开始写入,按ESC切换为命令模式,输入:wq保存并退出,:q!不保存强制退出)
sudo apt install vim #linux安装编辑器,已安装跳过
vi eula.txt

之后再次启动会下载所需文件,耐心等待,若下载出现错误可以开网络工具或者在log报错文件中找到报错的文件地址手动下载,手动下载再失败可以复制地址到网盘的P2P下载器下载。

  • Stop停止并保存服务器,注该开服方法不适用于国内版MC,且国内版MC与国际版不能互通
MC开服成功后相关内容
  • 配置文件

位置:服务器目录下Serverpropreity

  • 出生点保护:spawn-protection=16 #半径
  • 启用命令方块:enable-command-block=false #默认关闭,故有些地图无法使用,启用即可正常
  • 更多请跳转至wiki
  • 基本命令

控制台内无"/",游戏内需加"/"

op 玩家名 #使指定玩家获取权限
deop 玩家名 #作用与op相反
ban 玩家名 #将指定玩家踢出服务器(封禁)
Java服基础上实现与BE(基岩)互通

进不去下载页面试试魔法或代理或修改dns

以下链接为构建页面,选择一个最新构建的分支下载需对应需要的jar

Geyser-Fabric安装在mods文件夹 >服务器要求使用任何 客户端Mod 都会导致基岩版玩家无法进入服务器, Geyser-Spigot作为插件安装在plugins文件夹,服务器内/reload /reload confirm可以重载服务器插件 Geyser-Velocity独立端,单独窗口运行

  • quote:如果你使用的服务端核心并不支持 Java 16,请在 启动参数 添加 -DPaper.ignoreJavaVersion=true 来使得你的服务端能够正常运行。
  • 如果你的服务端核心实在无法在 Java 16 上运行,请考虑使用 独立版。
  • 手机版开互通服不建议使用独立端,需要较高性能
  • 一些旧版本的 Geyser 只和 Floodgate 1.0 适配而不支持 Floodgate 2.0,所以建议最新版
  • 关于Floodgate: >下载并放置在服务端目录下plugins文件夹内 >+ quote:你可以在各个子服上安装 Floodgate (但 Geyser 真的没必要) 来增强玩家的皮肤显示功能和在子服上使用 Floodgate API。如果你要这么做,你 必须 保证你将代理服务端内 Floodgate 文件夹内的 key.pem 文件放置到了 所有子服的 Floodgate 文件夹内的相同位置,否则,基岩版客户端无法加入服务器。 >+ 你只需在使用独立版上进行此步骤:复制 Floodgate 配置所在的目录下的 key.pem 文件到 Geyser独立版 的文件夹内。不要尝试将这个文件分享给其他人!这个密钥文件允许基岩版账号绕过 Java 版身份验证,如果有人拿到了它,他们可能会对您的服务器造成严重破坏 >+ 在你的 Floodgate 配置中,将 username-prefix 设置为你需要的前缀 - 你可以设置为 "" 以关闭基岩版前缀功能。 >> 在一些旧版本的 Paper 服务器(或者 Paper 的一些分支),你或许需要关闭你的服务器并删除你的 服务端 jar 文件同目录下的的usercache.json 文件以避免出现你的老的 Floodgate 玩家的前缀没有更新的问题。

  • 配置完Geyser[&Floodgate]后,服务端就配置完成了

仅基岩版相关

适合只开手机服务器的用户

####下载并解压服务端文件####
wget https://minecraft.azureedge.net/bin-linux/bedrock-server-1.18.12.01.zip #换成自己版本
unzip bedrock-server-1.18.12.01.zip -C minecraftbeserver/ #目录换成你自己想要的好记的名
####运行命令####
LD_LIBRARY_PATH=. ./bedrock_server
  • 修改配置文件同上,如:player-idle-timeout=0 #挂机踢出时间,0为不因挂机超时踢出玩家

1.4以下版本win用户可不安装新版dotnet,建议先启动试试不能启动再安装运行环境。另外:手机termux开tshock的服必须在proot/chroot环境中,需要安装一个linux系统

Windows安装dotnet后双击服务端程序直接运行即可

Windows游戏存档等目录:资源管理器--->左侧:我的文档/My Games/Terraria/ +Linux安装dotnet命令(termux旧版使用mono):

sudo apt install dotnet-sdk-6
  • Linux或使用脚本安装 >```bash

wget https://dot.net/v1/dotnet-install.sh -Oc dotnet-install.sh sudo chmod +x ./dotnet-install.sh ./dotnet-install.sh --channel 6.0 #可修改版本,推荐6.0 dotnet TerrariaServer.exe #运行服务器

apt install mono-complete

*TerariaServer.exe服务端游戏本体目录下自带,linux也是先下载游戏本体,进入游戏目录运行服务端文件*

  • Linux原版服务器: >```bash

#64位操作系统先执行以下命令 sudo add-apt-repository multiverse sudo dpkg --add-architecture i386 sudo apt update sudo apt install lib32gcc1 #下面安装steamcmd,steam也可以,在游戏目录启动游戏即可 sudo apt install steamcmd ./usr/games/steamcmd #sudo bash ./... login + 用户名 #登录帐号 app_update 105600 #安装terraria cd ~/Steam/steamapps/common/Terraria ./TerrariaServer.bin.x86_64 #运行服务端

Linux游戏存档等路径:~/.local/share/Terraria/

wget -c #目标地址,-c是意外中断后再次下载能接上 sudo apt install unzip unzip TShock*.zip -d tshock cd tshock tar -xf TShock*.tar #解压目标文件,-C 加已经创建好的目录地址 mono TerrariaServer.exe #启动命令

*如果提示开始下载dotnet之后失败,则先自己安装dotnet,见上*

+ 开服后看情况保存超级管理员代码,只有第一次显示,没记下来如果需要可以删除tshock.sqlite&auth.lck文件然后重启,或者其他方法见下
+ TShock安装插件:将插件名.dll放在ServerPlugins下,重启后TShock会自动生成相应的配置文件
+ 版本差异时可以使用插件解决(如不同平台最新版不同时,但只能跨一个大版本内的子版本)[CrossPlay跨版本插件](https://github.com/Moneylover3246/Crossplay)
+ 通过控制台移动用户组至admin组获得管理权限(常用),或是游戏内输入/auth [authcode]获取超管权限,也可移动用户组至superadmin(超级管理员),但是**不建议**用超管游玩,**超级管理的角色数据不会被保存**
+ config.json配置文件在tshock目录下,如出生点保护范围之类,可以进行查阅&修改,之后重启更新服务器,[TShock官方帮助文档](https://ikebukuro.tshock.co/);[相关链接推荐csdn1](https://blog.csdn.net/shuishen49/article/details/54743316);[相关链接推荐csdn2]([https://blog.csdn.net/junknow/article/details/128260828)
+ TShock基本命令(控制台内无"/",游戏内需加"/"):
>+ 游戏内:
>/register 密码
>
>/login [password]
>
>/auth [authcode]
>
>+ 控制台:
>```bash
> ban 玩家名
> help [页数]
>```

#还是terraria的目录下 #steam更新命令:app_update <应用ID> [-beta <测试名称>] [-betapassword <密码>] [validate] 版本号自行查看,validate可以不成功时再加 app_update 1281930 +tml版本号 validate ./start-tModLoaderServer.sh

  • exit停止并保存服务器,该开服方法不适用于国内版TR,且国内版TR与国际版不能互通

作者团队及其教程地址瓦西里沃尔特 bilibili

需先安装Node.js > >bash npm install vue-cli -g 安装vue-cli vue init webpack my-project 初始化项目 npm install 安装项目依赖 npm run build 生成上线目录部署 nmp run dev 本地测试服务器 >

Ctrl+C关闭服务器

需先安装Node.jsGit >bash npm install hexo-cli -g 安装hexo-cli hexo init 文件夹名 cd进去后npm install安装npm即完成 hexo new "文章名" 新文章 hexo new page "页面名" 生成新页面 hexo s 本地预览 hexo g 上传暂存区 hexo d 上传到Github hexo server -p 端口号 修改本地部署的端口 >

Ctrl+C关闭服务器

  1. 2.监听程序端口(可跳过-准备)

这里也给出了一些常见的应用端口,如果包含在内,或者已知,请跳过此步骤

先启动游戏服务器或创建局域网房间后才能看到其端口和协议类型,下面列出常见软件的协议类型及其端口

  • 网站默认http/https(vue:8080;PHPstudy:80;Hexo:4000;mdbook;3000;......)
  • 泰拉瑞亚Terraria自带TShock:TCP7777
  • 我的世界Minecraft:Java:TCP25565;内置服务端随机BE基岩版:UDP19132(互通服两个都要映射)
  • 铁锈战争Rusted Warfare:TCP5132
  • 生存战争Survivalcraft联机版:UDP28887
  • 星露谷物语Stardew Valley:UDP24642
  • 像素工厂MindustryTCP+UDP双协议映射&相同对外端口
  • 饥荒:UDP地上10999&地下10998
  • ......(有的游戏服务器需要两条隧道才能正常运行,例如:未转变者Unturned(quit退出并保存服务器)、MC互通服等)

如果出现报错显示端口被占用相关问题,可以修改配置文件改变游戏默认的端口号,但有的程序不提供配置文件修改端口号,那也可以在下面操作找到占用该端口号的程序并将它结束掉;linux系统结束程序在下面

一般游戏端口及其协议类型可以搜到,或者界面会告诉你,如果没有再进行下面的步骤


图片加载失败了,不过不影响

  1. 启动资源监视器 >
  • 方法一:直接运行,按下Win+R,输入以下内容 C:\Windows\System32\perfmon.exe
  • 方法二:右键windows菜单栏 ——> 选择任务管理器 ——> 选择性能一栏 ——> 下面单击“打开资源监视器
  1. 监听程序端口

图片加载失败了,看视频吧,或者复制图片地址到浏览器地址栏里手动浏览

在菜单栏网络下的页面划到监听端口一栏 我们需要的是目标游戏的传输协议类型和它的端口号 这里以TShock为例,它的默认端口号7777协议类型TCP 一般游戏的协议为TCPUDP,要根据协议类型选择**合适的映射(内网穿透)**工具,因为有的映射工具不支持UDP,还有的不支持TCP、http。

打开终端,输入 netstat -a

  • 参数含义:-a 显示所有;-n 以ip形式显示当前建立的有效连接和端口;-u 显示UDP协议;-t 显示TCP协议;-p 显示对应PID与程序名
  • 如果该方法不可用,可尝试安装nmap扫描本地端口
  1. 3.内网穿透方式(通用-实现)

前言:这里主要介绍基于第三方免费平台的内网穿透,倘若自己部署内网穿透,需要一份有固定公网ip的服务器和一个已经备案的域名,这里不讲,想要部署的可以自己搜索相关教程,还是挺全面的。

内网穿透流程图,可能不正确

我在这里列出常见的平台:(以下为普通用户配置:不购买套餐

  • 花生壳:极低的学习成本;实名1M/s每月1G且无HttpUDP,固定域名
  • cpolar:学习成本低;无需实名;无限流量;动态域名UDP;速度较低;http协议提供免费动态域名
  • 飞鸽:学习成本低;0.5M/s,签到给流量;http协议提供免费域名免费两条隧道但http只能一条
  • MirrorEdge Frp镜缘(莱云)映射:学习成本一般;1元实名刷脸;速度限制取决于所选节点,隧道固定域名
  • OpenFrp 内网穿透:学习成本低(带GUI启动器和樱花相似)免费,签到领流量;部分节点无需实名;速度限制12M/s(速度取决于所选节点与访客距离);固定域名;http协议需要绑定自己的域名
  • NATAPP:学习成本一般;动态域名实名;1Mbps;http协议提供免费域名
  • 网云穿:学习成本低;实名;每月1G;前7天3M/s会员,后面锁TCP1M/s,固定域名
  • ngrok:学习成本一般;无需实名;只给一条免费隧道,离得近的节点延迟较低;http会自动换https协议(相当于不支持http
  • Nat123:学习成本一般;无需实名支付实名账号只给5个N币<1M/s;支持自定二级域名;仅支持http协议
  • 闪库:1M;仅支持Http随机固定域名;未来可能实名 (以下是其他我没用过的内网穿透)
  • 樱花:学习成本低;1毛付费刷脸实名必须18+;新5/老10M/s速度限制,固定域名,进不去网上有备用路线
  • frp:有较高的学习成本,是自己部署内网穿透的开源工具,但需要有条件(公网主机),可扩展性强,不少内网穿透就是基于它的(例如莱云、Locyan、凿洞)
  • Sunny-Ngrok:1块付费刷脸实名;钉钉内网穿透:早已停止服务;蜻蜓网络通无法注册;LoCyan Frp:之前节点不可用,最近Q群审核使用;凿洞Free Frp:我不会用,它老报错;U-anywhere万由云QuickConnect哲西云:加入花生壳了;nat123Tinc
  • ......(数据来源于2023.1,可能不准确如有需要在下面留言更新)
  1. 注册账号填写并完善相关信息(如绑定验证账号、实名等,没有则跳过),然后后再进入控制面板
  2. 创建隧道(有的在本地创建隧道,形式不一,但需要的信息基本一样),填入相关信息:隧道名、协议类型本地地址(127.0.0.1或局域网地址)以及本地端口(上面查的)。(有的支持自定义子域名或绑定自己的域名,也有的支持一定限度内自定义对外端口号,也有的允许你自选节点,可以根据配置需要选择)
  3. 云端部署好后开始部署本地,先下载对应平台的服务端程序有的需要将其与个人账号绑定,一般是通过个人账户的Token(或口令、密钥等)进行绑定;
  4. 复制云端隧道创建后给的Token与本地映射服务端进行绑定,或者给予窗口选择自己的隧道并启动,启动后给出的地址(一般为:地址:端口号;像http类型只有地址)就是他人访问的所用到的信息了。
  • 应用平台类型(相对简单)
  1. 注册账号填写并完善相关信息
  2. 创建隧道填入:隧道名、协议类型本地地址本地端口、[自选节点或宽带套餐]等信息
  3. 启动隧道,即可获取我们所需的地址(一般为:地址:端口号;像http类型只有地址)
  • 访客使用地址教程

网页:访客将给定的地址直接粘贴到浏览器的地址栏访问;主机可以用localhost127.0.0.1访问 游戏:访客选择多人游戏并选择加入相关,填入给定的地址加入即可;主机可以用localhost127.0.0.1访问。

  • 只给一个填写IP地址的输入框,则填写 地址:端口号 的形式(如:MCJava版)
  • 同时给出IP地址和端口号地址的,各填入各所需的地址和端口,英文冒号直接省去(如:Terraria、MCBE版)

此处以Terraria的TShock服务端Cpolar和飞鸽内网穿透为例(图示+简短文字描述):

  • Cpolar 快捷方法

这是Cpolar较为便捷的操作方式 Cpolar方法一

  • 通用方法-以Cpolar和飞鸽为例

    ①②和Cpolar快捷方法的一样,创建后隧道管理界面会有相应隧道的访问地址 Cpolar方法二 启动后访问地址在隧道管理界面可见 飞鸽方法

  1. 4.IPv6公网方式(条件-实现)

  • 前言:理想状态下,IPv6延迟低,操作简单,免费且无需账号、认证等,不过前提是你的网络运营商向你提供IPv6服务,且你的电脑能够正常识别和使用,详细判断是否可用和配置教程可见相关教程【mc开服】教你白嫖运营商公网ipv6跟好兄弟联机】
  • 主机启动服务器后,访问端以 [对方的IPv6地址]:端口号 的格式直接连接即可
  • 注:这里没有条件不做演示,可移步到上方链接观看推荐视频学习。

类型二:提供局域网的程序(通过异地组网实现远程联机)

判断方法:提供IP直连的基本都支持局域网,因为你可以用路由器分配的地址对应程序的端口实现内网中不同设备信息交换,只是可能有些程序不提供现成的独立页面和自动搜索;也有一些程序仅支持使用局域网联机不开放IP直连,此类游戏一般有多人游戏的入口但既没有本地预设的P1234玩家位置,也没有IP直连的输入框,可能能够自动搜索网络下的房间。

  1. 1.部署本地服务器(必需-准备)

启动对应的服务端程序(可能需要填入部分配置信息)并等待部署完成即可,有的软件不自带服务端的启动程序,或者其不能够满足服务器的需求,因此需要下载对应的服务端

  • 房主:启动目标游戏--->多人游戏--->创建主机--->启动组网程序并加入同一组网网络--->等待其他玩家加入
  • 访客:启动目标游戏--->多人游戏--->启动组网程序并加入同一组网网络--->回到游戏在局域网下搜索主机并加入对应的房间

房主启动游戏后选择多人游戏--->创建主机即可(pe,pc同理)

方法一:启用游戏内置局域网服务器

房主启动游戏后选择单人游戏--->进入选定世界--->按键ESC--->对局域网开放--->(允许作弊:启用命令)创建一个局域网世界(给定的随机端口也可nat使用,但没必要)

方法二:部署服务端

请跳转至内网穿透部分查看部署服务器端方法,部署完后再回来下一步

  1. 2.异地组网方式(通用-实现)

前言:异地组网相较于其他方式依赖于软件的自动搜索,只是在理论上简单,实际操作更可能遇到问题,此时最好查询官方文档,这里我提出以下点建议:

  1. 组网成功后可以在命令提示符ping软件给出的虚拟网内其他用户的地址,以检查是否能够连通,若不能ping通大概率是不成功的
  2. 能ping通但软件自动搜索不能搜到,则检查防火墙的相关配置,若还是不行可以在对应的社区咨询
  • 中转服务器类型异地组网 异地组网流程图,但不一定正确

  • P2P类型异地组网 异地组网流程图,但不一定正确 我在这里列出常见的平台:(以下为普通用户配置:不购买套餐)

  • 常见平台

  • 蒲公英(已不完全免费):学习成本低;付费不推荐,简单,只要登录同一个账号即可;
  • Hiper(重名太多找不到链接):一个注册的账号付费后可以邀请其他人加入使用;签到送时长;学习成本低;宽带较好
  • EasyN2N:学习成本较低;只能Windows间使用,会自动安装一个虚拟网卡;加入同一个小组即可
  • Radmin LAN:学习成本低;只能Windows间使用,会自动安装一个虚拟网卡;加入同一个房间即可
  • UDPPLAN(博客):会选择自动安装一个虚拟网卡;简单免费;无需账号
  • TeamViewer(安装要选VPN):学习成本低;简单易用;但需要注册账号
  • ZeroTier:有一定学习成本;会自动安装一个虚拟网卡;管理能力强;但对网络要求较高,不过可以自己搭建plant
  • Tailscale
  • 游侠(已不完全免费)十分简单,需要实名认证
  • ......(数据来源于2023.1,可能不准确如有需要在下面留言更新)

0.注册账号[可能没有这一步] 1.创建一个网络,将网络的ID和验证密钥或者是网络名称和密钥给访客 2.访客通过给定的密钥加入该网络,即可实现异地组网

  • 无论是主机还是访客创建,只要在同一个网络下都一样,如果主机无法创建网络可以让访客试试
  • 房主创建本地服务器后,一般进入游戏选择多人游戏在局域网下搜索房主即可,有的游戏允许其他人通过组网平台给定的ip直连

此处以蒲公英红警2RadminLANMinecraft为例(图示+简短文字描述):

  • 蒲公英使用方法: 蒲公英使用教程
  • RadminLAN使用方法(通用): RadminLAN使用教程

类型三:本地预留位置的游戏(通过远程控制实现远程联机)

前言:远程控制操作起来相对简单,一般只能主机用手柄,其他连接的访客只能用键鼠。示例以向日葵为例,这里我列出常见的远程控制软件:

  • QQ/TIM仅支持PC间控制,免费但画质一般,有一定延迟,并且只能一对一连接;在好友面板选择远程协助,等待对方同意即可
  • 向日葵(v12绿色版无需账号登录):免费,可以多设备连接一台设备,功能较全;只需要把ID和验证码发给好友即可让好友远程控制。(连接人数较多时可能卡顿,重启向日葵服务并让好友们重新加入即可)
  • TeamViewer:免费;只需要把ID和验证码发给好友即可让好友远程控制。
  • Parsecwin10+):免费,易用,可以跨平台但有相应的系统版本限制,功能非常齐全,对游戏方面更加友好,但可能对网络有一定要求,不过有网页端可以用;既可以分享主机地址让他人加入(需要手动接受加入请求),也可以创建公开房间或者加入处于公开状态的房间来远程控制联机
  • 腾讯会议:免费简单;可能有一定延迟,视自己网络属性而定。
  • Steam远程畅玩(流式传输):免费,最简单,但需要双方互加好友(Steam有一定条件),而且对网络要求较高,可能用不了,需要有人游戏在库中;游戏内Shift+Tap唤出好友列表邀请好友远程畅玩即可
  • AnyDeskToDesk
  • ......(数据来源于2023.1,可能不准确如有需要在下面留言更新)

1.配置好游戏后,启动对应的远程协助软件,并通知好友启动相同的软件 2.将你的ID密钥给予好友,好友选择加入/连接功能远程获取你电脑的控制权及画面(QQ、Steam无密钥)?

  • 图文示例

    此处以向日葵DR2C为例(图示+简短文字描述): 向日葵使用方法: 向日葵联机教程 我不说是谁,好像有人的demo拼成了dome

其他附加问题

  • 若需手柄但没有,可以尝试使用DroidJoyMyJoy等软件将安卓手机转为手柄并连接电脑,亦或者是其他方法都。
  • 若好友电脑没有麦克风可以使用WO Mic来让安卓手机变为麦克风
  • 内网穿透要求实名但不满条件的,可以尝试不断使用新兴的或者国外的内网穿透工具,一般需要提交的信息较少
  • 游戏联机时非远程协助联机的服务器端的版本必须与用户端的版本相匹配,像TRMC可以通过安装跨版本插件(链接见下)来允许大版本内的联机兼容
  • 远程协助一般只有主机的手柄输入可以被识别,其他连接者只能使用键盘,因此大部分软件远程控制只能主机使用手柄

本文&视频中的链接汇总

Mindustry的Github发行页面

TML(Steam商店地址)(Mod) TShock服务端下载 CrossPlay跨版本插件 CrossPlay插件在TrBBS上的页面(旧)

  • Minecraft互通服

单开基岩版无插件无互通平台 MCpaper端下载 Geyser下载 Floodgate下载 多世界插件Multiverse-Core 背包隔离插件 空岛插件 空岛需要的前置插件 Forge下载 跨版本插件

  • 生存战争Survivalcraft联机版

SC联机版作者团队:瓦西里沃尔特

  • 红警双端联机

手机运行红警(b站视频教程)

总结

以上方法的最终目标都是打破空间限制实现远程联机,综合来看,原本联机空间越严格的程序在远程联机的方法上操作起来反而更简单。本次教程主要面向新萌,没什么技术力,如果有什么问题可以向我咨询,有什么错误可以指出,就是我不一定在线,回复可能较慢,见谅,感谢您的浏览O(∩_∩)O


  • Date: 2023-02-01 22:23:40

前言

  • 建议配合视频教程一起使用,这篇提供我已知的最优解,但不一定是最好
  • 完成本地的直播网站需要一台满足配置要求的设备(能带动OBS+内网穿透承载住他人的拉流;主要吃CPU和宽带,CPU方面基本上一般电脑都可以),体量不大宽带家用蛮够,主要看映射软件给你开放的宽带(obs默认码率一个访问者流量传输约为128KB/s),如果面向人群体量稍大如班级可以考虑研究一下p2p技术,再大这则博客就没用了,大型的平台主要采用CDN分发p2p
  • 需要两条http协议的隧道,如果网页有托管可以直接对外公开的话可以只要一个隧道(Github是https打头,数据不和http互通,需要额外配置)

准备工作

内网穿透需求可能要多个其他工具只要一个即可

  • 内网穿透工具(这里只列出支持http/https协议的)(视频演示方法需要凑出2条隧道

    • cpolar:学习成本低;无需实名;无限流量;动态域名UDP;速度较低;http协议提供免费动态域名免费一条http隧道
    • 飞鸽:学习成本低;0.5M,签到给流量;http协议提供免费域名免费两条隧道但http只能一条
    • OpenFrp 内网穿透(需域名):学习成本低(带GUI启动器和樱花相似)免费,签到领流量;部分节点无需实名;速度限制12M/s(速度取决于所选节点与访客距离);固定域名;http协议需要绑定自己的域名
    • NATAPP:学习成本一般;动态域名实名;1M;http协议提供免费域名
    • 闪库:1M/s;仅支持Http随机固定域名;未来可能实名 (以下是其他我没用过的内网穿透)
    • ngrok(https):学习成本一般;无需实名;只给一条免费隧道,离得近的节点延迟较低;http会自动换https协议(相当于不支持http
    • 花生壳(https):极低的学习成本;实名1M每月1G且无Http只有https,隧道固定域名
    • ......(数据来源于2023.1,可能不准确如有需要在下面留言更新)

工作原理及其流程(视频配置)

  • OBS添加采集源(常用三个):
  1. 显示器采集(桌面画面)
  2. 游戏源(全屏程序)
  3. 音频输入采集(麦克风)
  • OBS推流配置
  1. OBS选择设置 —>推流页面;服务选择自定义

  2. 服务器(推流地址)默认填rtmp://127.0.0.1:1935/live/(如果要改下面的拉流地址也要改一下)

  3. 启动流媒体服务器LiveGo获取channelkey;在浏览器地址栏输入http://localhost:8090/control/get?room=movie

    并回车,复制给出的channelkey填写到OBS推流页面的串流密钥**;

启动内网穿透工具,此处以NatApp和飞鸽为例(需要两条http隧道在线)

  • 飞鸽(映射80)

1.官网注册账号进入控制台

  1. 开通隧道 —> 选一个免费节点 —> 备注、前置域名自定义 —> 本地IP端口后面的端口改为80 —> 确认开通
  2. 下载对应的客户端,此处以带GUI的客户端为例,将隧道的id粘贴进去再启动隧道即可
  • NatApp(映射7001)
  1. 官网注册账号进入仪表盘
  2. 购买隧道 —> 免费隧道隧道名自定义Web类型本地端口7001
  3. 下载客户端,将authtoken复制粘贴到Natapp的配置文件中 其中,80端口phpstudy部署网页的默认端口,根据自己网站填写不同的,如hexo使用4000vue则为8080 7001端口LiveGo提供的HTTP-FLV传输协议的接口 每个隧道映射成功都会给一个没有端口的地址,这个之后会用到
  • 网页播放器配置

记事本或其他文本编辑器方式打开压缩包解压后的LiveOnlineWeb\phpstudy_pro\WWW\index.html文件 将body标签中的script标签内播放器的url改为内网穿透映射7001端口后给出的地址 + OBS推流地址端口后面的路径 + movie.flv 示例:url: 'http://xxxxxxxxx.xx.cpolar.top/live/movie.flv' 本地拉流地址:url:'http://127.0.0.1:7001/live/movie.flv' (本地视频流地址,只有主机能够拉流成功,其他人访问是拉自己设备该地址对应目录下的文件,故其他人无法拉流成功仅供自己测试用,该地址不会占用宽带

  1. 打开PHPstudy应用程序
  2. 启动WNMP服务
  3. 浏览器地址栏输入http://127.0.0.1:80http://localhost 即可进入本地网页(80可选填,都一样)
  • 检验是否推流成功

方法一:浏览器地址栏中直接将url地址填入并回车,检查浏览器是否能够下载到一个名为movie.flv的文件

方法二:直接打开网站检查是否能加载出直播画面以及声音

问题排查:

  • 方法二播放器黑屏然后使用方法一发现能够下载到流视频文件,这时候只要刷新一下网站即可,再不行OBS切断重新推流刷新
  • 直播画面有声音但是黑屏,可能是程序画面采用全屏方式运行但在采集源中没有对全屏应用的画面采集,此时在OBS采集源中加入游戏源选择采集任意全屏应用程序即可;或者将全屏程序改为窗口模式或者无边框模式
  • 有电脑的声音但是听不到自己发的声音,可能是没有麦克风的采集源,在OBS采集源加入音频输入采集;或者使用其他手段手机电脑加入同一个通话频道,会自动采集通话程序的声音,就是回声可能相对严重,也会有一定延迟,此时建议使用WO Mic

最后将内网穿透映射网页端口提供的地址分享给他人浏览即可, 其他人用浏览器打开该地址即可通过静态网页上的播放器就可以观看你的OBS推出的视频流画面。

  • 本地拉流演示图(不一定正确) 本地拉流,看到该消息可能是图片加载失败,和视频里的流程图是一样的,可以去看视频当中的
  • 其他人观看直播原理演示图(不一定正确) 其他人观看直播原理,看到该消息可能是图片加载失败,和视频里的流程图是一样的,可以去看视频当中的

拓展

这个问题我目前是采用多线程的方法解决的(整合包中我提供了line234页面并写好了超链接,根据需要自行填入映射好的7001本地端口地址到视频流的url),通过启用多个内网穿透工具共同映射7001端口分别给定的地址填入不同的页面,用户通过切换页面减少单个内网穿透工具的宽带压力,以此实现宽带的拓展

倘若有人的主机电脑没有麦克风或麦克风坏了,正好有手机在身边可以使用的话可以使用WO Mic来解决这个问题

WO Mic局域网连接使用教程

  • 流程图: 如果看到该文段可能是图片加载失败了,去看视频吧
  1. 手机端启动WO Mic应用程序并运行(在局域网广播)
  2. 将给定的局域网地址填写到电脑WO Mic Client的连接 —> 连接... —> 手机IP地址输入框中 —> 再点击连接即可
  • 手机端控制音量大小是否传输声音(=开关麦);电脑端可以选择设置本地播放方便调试声音

总结

通过内网穿透直播仅适合面向小众群体,例如学生无法与直播平台签约或者不想和直播平台签约想体验直播的人群,或者只是单纯想挂在自己博客上让访客碰运气看看有没有直播。 这项技术优点搭建迅速而且免费不花钱可以使用,人数不多体验还是很好的),有域名的话可以使用更好的映射软件,它们提供更好的免费的宽带,如OpenFrp(地址上面链接),感兴趣的可以尝试一下,我下面会发布整合包的链接不含内网穿透工具推流工具需自行额外安装

  • 蓝奏云

    https://wwxr.lanzoum.com/i1uKo0mhm3id 密码:civt

  • 百度网盘

    https://pan.baidu.com/s/1p33ncwXEq1UmLEuEerVSKA?pwd=1111 提取码:1111

前言

  • 建议配合视频教程一起使用,这篇提供我已知的最优解,但不一定是最好
  • 完成本地的直播网站需要一台满足配置要求的设备(能带动OBS+内网穿透承载住他人的拉流;主要吃CPU和宽带,CPU方面基本上一般电脑都可以),体量不大宽带家用蛮够,主要看映射软件给你开放的宽带(obs默认码率一个访问者流量传输约为128KB/s),如果面向人群体量稍大如班级可以考虑研究一下p2p技术,再大这则博客就没用了,大型的平台主要采用CDN分发p2p
  • 需要两条http协议的隧道,如果网页有托管可以直接对外公开的话可以只要一个隧道(Github是https打头,数据不和http互通,需要额外配置)

准备工作

内网穿透需求可能要多个其他工具只要一个即可

  • 内网穿透工具(这里只列出支持http/https协议的)(视频演示方法需要凑出2条隧道

    • cpolar:学习成本低;无需实名;无限流量;动态域名UDP;速度较低;http协议提供免费动态域名免费一条http隧道
    • 飞鸽:学习成本低;0.5M,签到给流量;http协议提供免费域名免费两条隧道但http只能一条
    • OpenFrp 内网穿透(需域名):学习成本低(带GUI启动器和樱花相似)免费,签到领流量;部分节点无需实名;速度限制12M/s(速度取决于所选节点与访客距离);固定域名;http协议需要绑定自己的域名
    • NATAPP:学习成本一般;动态域名实名;1M;http协议提供免费域名
    • 闪库:1M/s;仅支持Http随机固定域名;未来可能实名 (以下是其他我没用过的内网穿透)
    • ngrok(https):学习成本一般;无需实名;只给一条免费隧道,离得近的节点延迟较低;http会自动换https协议(相当于不支持http
    • 花生壳(https):极低的学习成本;实名1M每月1G且无Http只有https,隧道固定域名
    • ......(数据来源于2023.1,可能不准确如有需要在下面留言更新)

工作原理及其流程(视频配置)

  • OBS添加采集源(常用三个):
  1. 显示器采集(桌面画面)
  2. 游戏源(全屏程序)
  3. 音频输入采集(麦克风)
  • OBS推流配置
  1. OBS选择设置 —>推流页面;服务选择自定义

  2. 服务器(推流地址)默认填rtmp://127.0.0.1:1935/live/(如果要改下面的拉流地址也要改一下)

  3. 启动流媒体服务器LiveGo获取channelkey;在浏览器地址栏输入http://localhost:8090/control/get?room=movie

    并回车,复制给出的channelkey填写到OBS推流页面的串流密钥**;

启动内网穿透工具,此处以NatApp和飞鸽为例(需要两条http隧道在线)

  • 飞鸽(映射80)

1.官网注册账号进入控制台

  1. 开通隧道 —> 选一个免费节点 —> 备注、前置域名自定义 —> 本地IP端口后面的端口改为80 —> 确认开通
  2. 下载对应的客户端,此处以带GUI的客户端为例,将隧道的id粘贴进去再启动隧道即可
  • NatApp(映射7001)
  1. 官网注册账号进入仪表盘
  2. 购买隧道 —> 免费隧道隧道名自定义Web类型本地端口7001
  3. 下载客户端,将authtoken复制粘贴到Natapp的配置文件中 其中,80端口phpstudy部署网页的默认端口,根据自己网站填写不同的,如hexo使用4000vue则为8080 7001端口LiveGo提供的HTTP-FLV传输协议的接口 每个隧道映射成功都会给一个没有端口的地址,这个之后会用到
  • 网页播放器配置

记事本或其他文本编辑器方式打开压缩包解压后的LiveOnlineWeb\phpstudy_pro\WWW\index.html文件 将body标签中的script标签内播放器的url改为内网穿透映射7001端口后给出的地址 + OBS推流地址端口后面的路径 + movie.flv 示例:url: 'http://xxxxxxxxx.xx.cpolar.top/live/movie.flv' 本地拉流地址:url:'http://127.0.0.1:7001/live/movie.flv' (本地视频流地址,只有主机能够拉流成功,其他人访问是拉自己设备该地址对应目录下的文件,故其他人无法拉流成功仅供自己测试用,该地址不会占用宽带

  1. 打开PHPstudy应用程序
  2. 启动WNMP服务
  3. 浏览器地址栏输入http://127.0.0.1:80http://localhost 即可进入本地网页(80可选填,都一样)
  • 检验是否推流成功

方法一:浏览器地址栏中直接将url地址填入并回车,检查浏览器是否能够下载到一个名为movie.flv的文件

方法二:直接打开网站检查是否能加载出直播画面以及声音

问题排查:

  • 方法二播放器黑屏然后使用方法一发现能够下载到流视频文件,这时候只要刷新一下网站即可,再不行OBS切断重新推流刷新
  • 直播画面有声音但是黑屏,可能是程序画面采用全屏方式运行但在采集源中没有对全屏应用的画面采集,此时在OBS采集源中加入游戏源选择采集任意全屏应用程序即可;或者将全屏程序改为窗口模式或者无边框模式
  • 有电脑的声音但是听不到自己发的声音,可能是没有麦克风的采集源,在OBS采集源加入音频输入采集;或者使用其他手段手机电脑加入同一个通话频道,会自动采集通话程序的声音,就是回声可能相对严重,也会有一定延迟,此时建议使用WO Mic

最后将内网穿透映射网页端口提供的地址分享给他人浏览即可, 其他人用浏览器打开该地址即可通过静态网页上的播放器就可以观看你的OBS推出的视频流画面。

  • 本地拉流演示图(不一定正确) 本地拉流,看到该消息可能是图片加载失败,和视频里的流程图是一样的,可以去看视频当中的
  • 其他人观看直播原理演示图(不一定正确) 其他人观看直播原理,看到该消息可能是图片加载失败,和视频里的流程图是一样的,可以去看视频当中的

拓展

这个问题我目前是采用多线程的方法解决的(整合包中我提供了line234页面并写好了超链接,根据需要自行填入映射好的7001本地端口地址到视频流的url),通过启用多个内网穿透工具共同映射7001端口分别给定的地址填入不同的页面,用户通过切换页面减少单个内网穿透工具的宽带压力,以此实现宽带的拓展

倘若有人的主机电脑没有麦克风或麦克风坏了,正好有手机在身边可以使用的话可以使用WO Mic来解决这个问题

WO Mic局域网连接使用教程

  • 流程图: 如果看到该文段可能是图片加载失败了,去看视频吧
  1. 手机端启动WO Mic应用程序并运行(在局域网广播)
  2. 将给定的局域网地址填写到电脑WO Mic Client的连接 —> 连接... —> 手机IP地址输入框中 —> 再点击连接即可
  • 手机端控制音量大小是否传输声音(=开关麦);电脑端可以选择设置本地播放方便调试声音

总结

通过内网穿透直播仅适合面向小众群体,例如学生无法与直播平台签约或者不想和直播平台签约想体验直播的人群,或者只是单纯想挂在自己博客上让访客碰运气看看有没有直播。 这项技术优点搭建迅速而且免费不花钱可以使用,人数不多体验还是很好的),有域名的话可以使用更好的映射软件,它们提供更好的免费的宽带,如OpenFrp(地址上面链接),感兴趣的可以尝试一下,我下面会发布整合包的链接不含内网穿透工具推流工具需自行额外安装

  • 蓝奏云

    https://wwxr.lanzoum.com/i1uKo0mhm3id 密码:civt

  • 百度网盘

    https://pan.baidu.com/s/1p33ncwXEq1UmLEuEerVSKA?pwd=1111 提取码:1111

进入termux的linux系统后

安装rust

apt install curl
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
#配置环境变量(在控制台输只保存当前会话一次)
vi ~/.profile
export PATH=$HOME/.cargo/bin:$PATH
#换源
vi ~/.cargo/config
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

error: linker cc not found

apt install build-essential

failed to run custom build command for alsa-sys v0.3.1

apt install pkg-config git
git clone https://ghproxy.com/https://github.com/diwic/alsa-sys.git
cd alsa-sys && regenerate_bindings.sh
#或
apt install libasound2-dev

failed to run custom build command for libudev-sys v0.1.4

apt install libudev-dev

?:cargo tree | grep udev

总结

apt install curl pkg-config libudev-dev build-essential libasound2-dev
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
cd alsa-sys && regenerate_bindings.sh

编译windows平台exe

rustup target add x86_64-pc-windows-gnu
apt install mingw-w64
cargo new win #创建一个新项目[可选]
#cd 项目目录或用户目录再写配置文件
[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
ar = "x86_64-w64-mingw32-gcc-ar"
#编译:
cargo build --release --target x86_64-pc-windows-gnu

拓展:安装桌面环境(自选,仅列示例)

apt install xfce4 tigervnc-common tigervnc-standalone-server dbus-x11 #最后一个报错时选装
vncserver
#输入两遍不少于6位密码
vncserver -kill :1 #关闭1号vnc服务